私は Objectify 4 でトランザクションを使用して、Kind_A の一連のエンティティを更新しています。これらには、トランザクション内で変更したいフィールドが多数ありますが、他のエンティティへの参照も多数あります。
class Kind_A {
@Id Long id;
@Parent
@Load
Ref<Kind_P> parent;
String name;
@Load
Ref<Kind_B> b;
}
ここでのエンティティ グループは、独自Ref
の sを持つ Kind_P のインスタンスによって定義されます。
class Kind_P {
@Id Long id;
@Load
Ref<Kind_Q> q;
}
私のトランザクションではofy().load()
、次のように祖先クエリを使用して、いくつかのエンティティを List として扱います。
ofy().load().type(Kind_A.class).ancestor(p).list();
次に、リストを繰り返し、name
フィールド ( Ref<>
s ではなく)を変更してから、リストを変更しofy().save()
ます。
祖先クエリであるため、すべてのエンティティload()
が同じ@Parent
( ) である必要があります。p
したがって、一見すると、私load()
とsave()
私のKind_A
エンティティは、単一のエンティティ グループ ( ) を扱っていp
ます。
しかし、私はIllegalArgumentException: operating on too many entity groups in a single transaction
. これは、Objectify がすべてKind_B
の とを含むオブジェクト グラフをロードしているためだと推測していますKind_Q
。
これは正しいです?そのため、トランザクションの範囲は、 で定義されたエンティティ グループを超えて突然広がっていますp
。
もしそうなら、Objectify にトランザクション内の @Load アノテーションを無視するように指示する方法はありますか?
(Eclipse デバッガーなどで) トランザクションに参加しているエンティティを見つける方法はありますか?
どんな洞察も大歓迎です!