0

永続性のためにJDOを使用してGoogleAppEngine(Java)に基づくアプリを構築しています。

誰かが私に例を教えたり、トランザクション内でjavax.jdo.PersistenceManager.makePersistentAll()を使用して(同じタイプの)複数のエンティティの永続化を示すコードを教えてもらえますか?

基本的に、トランザクション内でmakePersistentAll()を使用して保存できるように、1つのエンティティグループに複数のエンティティを配置する方法を理解する必要があります。

4

4 に答える 4

1

ドキュメントのこのセクションでは、まさにそれを扱っています。

于 2010-02-03T13:36:54.727 に答える
1

これは私がしました:

public static final Key root_key = KeyFactory.createKey("Object", "RootKey");

..。

そのため、一般的なデータストアの永続オブジェクトは、IDを自動的に取得するのではなく、コンストラクターで設定します。

public DSO_MyType(string Name, Key parent)
    {
        KeyFactory.Builder b = new KeyFactory.Builder(parent);;
        id = b.addChild(DSO_MyType.class.getSimpleName() , Name).getKey();
    }

そして、親としてroot_keyを渡します

同じ種類のオブジェクトに異なる親を渡すことができるかどうかはわかりません

于 2010-02-05T22:06:23.770 に答える
0

ニックの応答をありがとう。

このドキュメントでは、親子関係にある場合のAppEngineによるエンティティグループの暗黙的な処理についてのみ説明します。トランザクション内でPeristentManager.makePersistentAll(list)を使用して、同じタイプの複数のオブジェクトを保存したいと思います。オブジェクトが同じエンティティグループでない場合、これは例外をスローします。現在、私は以下のようにそれを行うことができますが、これを行うためのより良い、より適切なアプローチが必要だと思います-

User u1 = new User("a");
UserDAO.getInstance().addObject(user1); 
// UserDAO.addObject uses PersistentManager.makePersistent() in transaction and user 
// object now has its Key set. I want to avoid this step.

User u2 = new User("x"); 
u2.setKey(KeyFactory.createKey(u1.getKey(),User.class.getSimpleName(), 100 /*some random id*/)); 

User u3 = new User("p");
u3.setKey(KeyFactory.createKey(u1.getKey(), User.class.getSimpleName(), 200)); 

UserDAO.getInstance().addObjects(Arrays.asList(new User[]{u2, u3})); 
// UserDAO.addObjects uses PersistentManager.makePersistentAll() in transaction.

このアプローチは機能しますが、これに伴う問題は、エンティティグループを作成するためにすでに永続的なエンティティに依存する必要があることです。

于 2010-02-03T16:13:11.427 に答える
0

Gopi、AFAIKあなたはそれをする必要はありません...これはうまくいくはずです(それをテストしていません):

List<User> userList = new ArrayList<User>();
userList.add(new User("a"));
userList.add(new User("b"));
userList.add(new User("c"));
UserDAO().getInstance().addObjects(userList);

繰り返しになりますが、これにより、これらすべてのオブジェクトが同じエンティティグループに配置されます。私が間違っているかどうか知りたいです。

于 2010-03-29T14:37:20.273 に答える