如何在JDO中唯一标识和获取子对象

时间:2010-07-17 08:32:37

标签: java google-app-engine jdo

我刚刚学习JDO和GAE,并且非常坚持这一点。

我已经离开了

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

现在还有父母:

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

但是,执行此操作后,以下用于通过id获取文章的代码不再有效。如何唯一标识对象?

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

孩子的钥匙包含有关其父母的信息。您需要使用包含父ID的KeyFactory方法。

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

查看javadoc了解更多详情。为方便起见,还有一个Builder类,可以让您执行以下操作:

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

随着您的层次结构越来越深入,该表单变得更有用,因为您可以在调用addChild之前将一堆getKey链接在一起。

如果您不知道某篇文章的父级,我认为您在执行GQL查询时遇到困难,而不是按键获取。