我尝试使用objectify事务,但是当我需要重新加载在同一事务中创建的对象时,我遇到了一些问题。
获取此示例代码
@Entity
public class MyObject
{
@Parent
Key<ParentClass> parent;
@Index
String foo;
}
ofy().transact(new VoidWork()
{
@Override
public void vrun()
{
ParentClass parent = load();// load the parent
String fooValue = "bar";
Key<ParentClass> parentKey = Key.create(ParentClass.class, parent.getId())
MyObject myObject = new MyObject(parentKey);
myObject.setFoo(fooValue);
ofy().save().entity(myObject).now();
MyObject reloaded = ofy().load().type(MyObject.class).ancestor(parentKey).filter("foo", fooValue).first().now();
if(reloaded == null)
{
throw new RuntimeException("error");
}
}
});
我的对象重新加载总是为空,也许我想念一些东西,但在逻辑上我可以查询在同一事务中创建的对象吗?
由于
答案 0 :(得分:0)
在此特定情况下,云数据存储区与关系数据库不同。文档说明了 -
与大多数数据库不同,查询并进入云数据存储区 事务中没有看到之前写入的结果 交易。具体而言,如果在其中修改或删除实体 事务,查询或查找返回原始版本 交易开始时的实体,如果是,则不执行任何操作 实体当时不存在。
https://cloud.google.com/datastore/docs/concepts/transactions#isolation_and_consistency