0

Je construis une application basée sur google app engine (Java) en utilisant JDO pour la persistance. Est-ce que quelqu'un peut me donner un exemple ou un point de moi à un code qui montre la persistance de plusieurs entités (de même type) en utilisant javax.jdo.PersistenceManager.makePersistentAll() dans une transaction.Comment créer des entités dans un groupe d'entités?

Fondamentalement, j'ai besoin de comprendre comment mettre plusieurs entités dans un groupe d'entités afin qu'elles puissent être enregistrées en utilisant makePersistentAll() dans la transaction.

Répondre

0

Merci pour la réponse Nick.

Ce document ne parle que du traitement implicite des groupes d'entités par le moteur de l'application lorsqu'il s'agit d'une relation parent-enfant. Je veux enregistrer plusieurs objets de même type en utilisant PeristentManager.makePersistentAll (liste) dans une transaction. Si les objets ne sont pas le même groupe d'entités, cela génère une exception. À l'heure actuelle, je pouvais le faire comme ci-dessous, mais pense qu'il doit y avoir une meilleure et une approche plus appropriée pour ce faire -

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. 

Bien que cette approche fonctionne, le problème est que vous devez dépendre d'une entité déjà persistante créer un groupe d'entités.

1

Je l'ai fait:

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

...

donc un datastore objet persistant typique définira l'ID dans le constructeur au lieu d'obtenir un automatiquement

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

et vous passer root_key en tant que parent

Je ne suis pas sûr si vous pouvez passer différent les parents aux objets du même genre

0

Gopi, vous n'avez AFAIK pas faire cela ... cela devrait fonctionner (ont pas testé):

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); 

Encore une fois, autant que je sache, cela devrait mettre tous ces objets dans le même groupe d'entités. J'aimerais savoir si j'ai tort.

+0

Dans une transaction, cela ne fonctionne pas. C'est ce que ma question mentionne. – Gopi

Questions connexes