2011-08-07 4 views
0

En utilisant le gestionnaire peristance, comment puis-je récupérer un objet enfant connaissant une propriété enfant et la clé parent?Appengine JDO, comment puis-je récupérer un objet enfant connaissant une propriété enfant et la clé parent?

Le parent est défini comme suit:

public class User { 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Key id; 

@Persistent(mappedBy = "user") 
@Element(dependent = "true") 
private List<Section> sections; 
... 

Et l'enfant est défini comme suit:

public class Section { 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Long id; 

@Persistent 
private User user; 

@Persistent 
private String title; 
... 

Connaissant l'id 'utilisateur' et le titre 'Section', comment puis-je récupérer la section?. J'essayais de construire une requête pour récupérer la section en utilisant quelque chose comme ceci: 'where title == xxx AND user.id ¿? == xxx 'mais je ne suis pas sûr de savoir comment spécifier l'ID de l'utilisateur. Est-il possible de le faire en utilisant des requêtes ou des méthodes du gestionnaire de persistance?

Merci.

Répondre

1

J'ai finalement fait avec cette méthode:

public static Section getSectionByTitle(String title, Key user_key){ 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    Query query = pm.newQuery("select from "+Section.class.getName()+" WHERE title == s && user == keyParam"); 
    query.declareParameters("String s, String k"); 
    query.setUnique(true); 
    Section section = (Section) query.execute(title, user_key.getId()); 
    return section; 
} 
0

Vous pouvez appeler cette méthode sur l'objet de la requête:

q.setAncestor (ancestorKey);

Lire this page pour plus d'informations (Requêtes Ancêtres). Je me souviens d'avoir vu quelque chose comme la syntaxe 'where ANCESTOR =' mais je ne trouve aucune référence pour cela maintenant.

+3

Merci, mais la méthode setAncestor fonctionne pour l'API de bas niveau datastore, je tentais d'utiliser une requête JDO. – pablobart

Questions connexes