2010-07-17 7 views
1

Je suis en train d'apprendre JDO et GAE, et je me suis retrouvé très coincé là-dessus.Comment identifier et récupérer des objets enfants dans JDO

Je suis passé d'avoir juste

public class Article { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 
    ... 
} 

présent aussi avoir un parent:

public class ArticleCollection { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 
    private long count 
    private Set<Article> articles; 
} 

Cependant après avoir fait cela, le code suivant iront chercher un article par id ne fonctionne plus. Comment identifier de manière unique un objet?

Article article = (Article)pm.getObjectById(KeyFactory.createKey(Article.class.getName(), id)); 

Toute aide très appréciée!

Répondre

2

La clé d'un enfant contient des informations sur son parent. Vous devez utiliser une méthode KeyFactory qui inclut l'ID parent.

createKey(Key parent, java.lang.String kind, long id) 
      Creates a new Key with the provided parent from its kind and ID. 

Consultez le javadoc pour plus de détails. Il y a aussi une classe Builder pour plus de commodité qui vous permet de faire quelque chose comme:

Key key = new Builder("ArticleCollection", 123).addChild("Article", 1424).getKey(); 

Cette forme devient plus utile que la hiérarchie se développe plus profondément, parce que vous pouvez enchaîner un tas de addChild s ensemble avant d'appeler getKey.

Si vous ne connaissez pas le parent d'un article, je pense que vous êtes bloqué par une requête GQL plutôt que par une clé get by.

+0

Merci, je ne pouvais pas trouver cette information partout !!! +1 – Jacob