我正在使用HRD,因为我希望使用实体组对单个事务中的多个实体进行更改。
了解非事务性(非祖先)查询可能会查看先前已提交事务的全部,部分或全部结果。
我现在面临的问题是: 提交事务以将新记录添加到db
之后 Transaction tx = pm.currentTransaction();
tx.begin();
pm.makePersistent(object);
tx.commit();
跟随查询提交的记录,有时它会返回结果,有些时候只返回为空
Query q = pm.newQuery(queryStatement);
CompanyProfile result = (CompanyProfile) q.execute();
p / s:当关闭HRD时,它完美地工作。
任何解决方法?
由于 RGDS SJ
答案 0 :(得分:1)
没有办法解决它:HRD总是最终保持一致:http://code.google.com/appengine/docs/python/datastore/queries.html#Setting_the_Read_Policy_and_Datastore_Call_Deadline
一种方法是使用get而不是查询。获取/放置/删除在HRD中非常一致,而查询最终是一致的:http://code.google.com/appengine/docs/java/datastore/hr/
如果这是一个用户会话中的立即查询后保存方案,您可以查询数据并手动将已保存的实体添加到列表中。
答案 1 :(得分:0)
如果您想使用关系数据库模型,您可能需要查看Google Cloud SQL:https://developers.google.com/cloud-sql/我自己没有尝试过,但我在我的应用中没有使用任何交易。< / p>
我肯定不会使用旧的非HR数据存储区。如果它在接下来的一两年结束时消失,我不会感到惊讶。它并不像HR数据存储那样可靠。但正如您所发现的那样,如果您不习惯,最终的一致性可能会非常棘手。
答案 2 :(得分:0)
如果以下查询也在同一事务中完成,则应返回正确的结果。但是,所有其他查询最终都是一致的,不幸的是数据存储区的性质。