boolean r = ofy().transact(new Work<Boolean>() {
@Override
public Boolean run() {
Visit visit = ofy().load().type(Visit.class)
.filter(Visit.USER_ID, userID)
.filter(Visit.VENUE_ID, venueID).first().get();
if (visit == null)
return false;
visit.setLastRequestDate(new Date(timestamp));
ofy().save().entity(visit).now();
return true;
}
});
我得到
java.lang.IllegalArgumentException:事务内只允许祖先查询。
对于与get()
call.
为什么?我只是查询Visit
本次交易中的实体。
我在事务中执行此操作,因为我希望所有这些都作为原子操作执行。
无法在事务内进行无祖先查询。要么不进行事务处理,要么用 get 替换查询。
您可以做的最接近的是:
- 通过无祖先查询获取实体,无需事务。记住实体的密钥。
- 开始交易。
- 通过key获取实体。
- 检查查询条件是否仍然适用(= 属性仍然具有与查询条件中相同的值)。这样您就可以确保自执行查询以来实体没有发生更改。
- 更改并保存实体。提交交易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)