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;
        }
    });

我得到



用于get()调用的行。
为什么?我只在此事务中查询Visit实体。
我正在事务中执行此操作,因为我希望所有这些操作都作为原子操作执行。

最佳答案

无法在事务内进行无祖先查询。您可以不进行事务处理,也可以将查询替换为get。

您可以做的最接近的是:

  • 获取没有事务的无祖先查询的实体。记住实体的 key 。
  • 开始交易。
  • 通过 key 获取实体。
  • 检查查询条件是否仍然适用(=属性仍然与查询条件中的值相同)。这样,您可以确定自从执行查询以来,实体没有更改。
  • 更改并保存实体。提交交易。
  • 10-06 08:41
    查看更多