我正在为使用JDO的网站实施标记系统。 我想使用this方法。
但是我不熟悉JDO中的关系。 为了简单起见,我看起来像这样:
@PersistentCapable
class Post {
@Persistent String title;
@Persistent String body;
}
@PersistentCapable
class Tag {
@Persistent String name;
}
我需要什么样的JDO关系以及如何实现它们?我希望能够列出属于Tag
的所有Post
,并且还能够列出具有给定Post
的所有Tag
。所以最后我想有这样的事情:
Table: Post
Columns: PostID, Title, Body
Table: Tag
Columns: TagID, name
Table: PostTag
Columns: PostID, TagID
答案 0 :(得分:3)
你应该看看:http://code.google.com/appengine/docs/java/datastore/relationships.html#Unowned_Relationships
基本上你创建一个Class PostTag,它的主键上的appart也有两个关键字段用于每个关系:
@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;
}
然后当你创建PostTag时,你应该做这样的事情
PostTag pt = new PostTag();
pt.setPost(post.getKey());
pt.setTag(tag.getKey());
// persist pt here;
我在这里使用了getter / setter,因为你通常将字段设置为private并通过访问器方法访问它们,但那是你的调用;上述代码段中的“post”和“tag”也应该是您要链接的已保留对象。
编辑:您可能还应该看一下:http://code.google.com/appengine/docs/java/datastore/usingjdo.html#Unsupported_Features_of_JDO因为app引擎只部分实现了JDO(我相信这是因为与传统数据库相比,数据存储的工作方式不同)。他们可能会在将来添加对缺失功能的支持。
答案 1 :(得分:0)
你想要一个JDO支持的many-to-many relationship。但是,App Engine并不完全支持JDO,因此我不知道这是否可行。