オブジェクト化トランザクションを使用しようとしましたが、同じトランザクションで作成されたオブジェクトをリロードする必要があるときに問題があります。GAE同じトランザクション内のトランザクションで作成されたロードオブジェクトのオブジェクト化
マイオブジェクトのリロードは常にnullである
@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");
}
}
});
このサンプルコード乗り、多分私は何かを逃したが、論理的にトランザクション内で、私は同じトランザクションで作成されたオブジェクトを照会することができますか?
おかげで、私は客観ハンドルがローカル・トランザクション・コンテキスト内のキャッシュが、明らかに客観化してこれを行わないことをことを願っています。.. – Benjyyyyy
あなたがやった場合は、GETバイキー取引でObjectifyは(セッションキャッシュから)保存したオブジェクトを提供します。ただし、クエリはデータストアのクエリプロセッサに送信されます(セッションキャッシュからクエリを満たす方法はありません)。したがって、null結果セットが表示されます。 – stickfigure
これは、「データストアをキー値ストアとして考えることで、いくつかの追加のインデックス作成動作がオンになっている」となります。クエリ動作にはいくつかの癖があります。 – stickfigure