2010-05-20 4 views
3

Je suis en train de mettre en place un système de marquage pour un site web utilisant JDO. Je voudrais utiliser la méthode this.Implémentation du marquage dans JDO

Cependant, je suis nouveau pour les relations dans JDO. Pour faire simple, ce que je ressemble à ceci:

@PersistentCapable 
class Post { 
@Persistent String title; 
@Persistent String body; 
} 

@PersistentCapable 
class Tag { 
@Persistent String name; 
} 

Quel genre de relations JDO ai-je besoin et comment les mettre en œuvre? Je veux être en mesure de lister tous Tag s qui appartiennent à un Post, et aussi être en mesure de lister tous les Post s qui ont donné Tag. Donc à la fin, je voudrais avoir quelque chose comme ceci:

Table: Post 
Columns: PostID, Title, Body 

Table: Tag 
Columns: TagID, name 

Table: PostTag 
Columns: PostID, TagID 

Répondre

3

Vous devriez regarder: http://code.google.com/appengine/docs/java/datastore/relationships.html#Unowned_Relationships

Fondamentalement, vous créez une classe PostTag qui appart à partir de son clé primaire a également deux domaines clés pour chacune des relations:

@PersistentCapable 
class PostTag { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 
    /*you should add this to Post and Tag as well, 
    since this is what the fields in PostTag will reference 
    you can rename them to ClassnameID if you like, I believe*/ 

    @Persistent 
    private Key post; 

    @Persistent 
    private Key tag; 
} 

Ensuite, lorsque vous créez PostTag vous devrait faire quelque chose comme ça

PostTag pt = new PostTag(); 
pt.setPost(post.getKey()); 
pt.setTag(tag.getKey()); 
// persist pt here; 

J'ai utilisé des getters/setters ici, puisque vous définissez habituellement les champs à privé et accès t ourler à travers les méthodes d'accesseur, mais c'est votre appel; aussi 'post' et 'tag' dans l'extrait ci-dessus sont supposés être les objets déjà persistés que vous voulez lier. Editer: vous devriez probablement aussi jeter un oeil à: http://code.google.com/appengine/docs/java/datastore/usingjdo.html#Unsupported_Features_of_JDO puisque le moteur d'application n'implémente que partiellement JDO (je crois que c'est en raison du fonctionnement différent du magasin de données par rapport aux bases de données traditionnelles). Cependant, ils peuvent ajouter du support pour les fonctionnalités manquantes à l'avenir.