1

私はこの種の問題を解決するのにいくつかの困難を抱えています:

ネストされたエンティティがいくつかあり、それらを同じトランザクションで永続化しようとしています(HRDを有効にします)。

エンティティA:

@Entity 
public class A {
    @Id Long id;
    List<B> children;
}

エンティティB:

@Entity 
public class B {
    @Id Long id;
}

6つのインスタンス(2つのエンティティグループ、A e Bのみ)を永続化しようとすると...

public void testOfy() {
    ofy.getFactory().register(A.class);
    ofy.getFactory().register(B.class);

    List<B> list = new ArrayList<B>();

    final A a0 = new A();
    final B b1 = new B();
    final B b2 = new B();
    final B b3 = new B();
    final B b4 = new B();
    final B b5 = new B();

    Ofy o = ofy.transaction();

    try {
        o.save().entities(b1).now(); list.add(b1);
        o.save().entities(b2).now(); list.add(b2);
        o.save().entities(b3).now(); list.add(b3);
        o.save().entities(b4).now(); list.add(b4);
        o.save().entities(b5).now(); list.add(b5);

        a0.children = list;
        o.save(a0);
        o.getTxn().commit();
    }

    finally {
        if (o.getTxn().isActive())
            o.getTxn().rollback();
    }

}

例外が発生します:

java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:36)

ただし、インスタンスを5つだけ配置すると、すべてが機能します...

public void testOfy() {
    ofy.getFactory().register(A.class);
    ofy.getFactory().register(B.class);

    List<B> list = new ArrayList<B>();

    final A a0 = new A();
    final B b1 = new B();
    final B b2 = new B();
    final B b3 = new B();
    final B b4 = new B();
    final B b5 = new B();

    Ofy o = ofy.transaction();

    try {
        o.save().entities(b1).now(); list.add(b1);
        o.save().entities(b2).now(); list.add(b2);
        o.save().entities(b3).now(); list.add(b3);
        o.save().entities(b4).now(); list.add(b4);
        // o.save().entities(b5).now(); list.add(b5);

        a0.children = list;
        o.save(a0);
        o.getTxn().commit();
    }

    finally {
        if (o.getTxn().isActive())
            o.getTxn().rollback();
    }

}

Objectify 4.0b3を使用していますが、何か提案はありますか?

ありがとうございました!

4

1 に答える 1

4

エンティティ グループとは何かを誤解しています。エンティティ グループはクラスではなく、インスタンス(またはインスタンスのグループ) です。

これらの各エンティティは、個別のエンティティ グループを表します。XG トランザクションでは、トランザクションごとに最大 5 つの EG が許可されます。6番目は、表示されるエラーを生成します。

于 2012-07-17T03:12:33.873 に答える