GAE Objectify在同一事务

时间:2016-09-30 15:38:53

标签: java google-app-engine transactions objectify

我尝试使用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");
        }
    }
});

我的对象重新加载总是为空,也许我想念一些东西,但在逻辑上我可以查询在同一事务中创建的对象吗?

由于

1 个答案:

答案 0 :(得分:0)

在此特定情况下,云数据存储区与关系数据库不同。文档说明了 -

  

与大多数数据库不同,查询并进入云数据存储区   事务中没有看到之前写入的结果   交易。具体而言,如果在其中修改或删除实体   事务,查询或查找返回原始版本   交易开始时的实体,如果是,则不执行任何操作   实体当时不存在。

https://cloud.google.com/datastore/docs/concepts/transactions#isolation_and_consistency