为什么我会收到“仅允许在事务内查询祖先查询”错误

2023-11-27

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 替换查询。

您可以做的最接近的是:

  1. 通过无祖先查询获取实体,无需事务。记住实体的密钥。
  2. 开始交易。
  3. 通过key获取实体。
  4. 检查查询条件是否仍然适用(= 属性仍然具有与查询条件中相同的值)。这样您就可以确保自执行查询以来实体没有发生更改。
  5. 更改并保存实体。提交交易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我会收到“仅允许在事务内查询祖先查询”错误 的相关文章

随机推荐