java - 如何在JDO中唯一地识别和获取子对象

标签 java google-app-engine jdo

我刚刚学习 JDO 和 GAE,并且在这方面陷入了困境。

我已经不再拥有

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

现在也有 parent 了:

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));

非常感谢任何帮助!

最佳答案

子项的 key 包含有关其父项的信息。您需要使用包含父 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();

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

如果您不知道文章的父项,我认为您会陷入执行 GQL 查询而不是按键获取的困境。

关于java - 如何在JDO中唯一地识别和获取子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3270791/

相关文章:

java - 更新的 JDO 对象不会保留在 GWT 中

java - 为 JDO 实体选择某个 "column"

java - 如何在 Jframe java(eclipse) 中加载图像?

java - Ignite 在持久化时无法消耗 WAL 日志并释放操作系统缓冲区

python - 如何验证 Google AppEngine 上的 Python 脚本以使用 Google Firebase?

java - Google App Engine 上的小工具托管

java - 将继承类型之间的关系建模为 ORM

java - 如何在安卓应用中显示日期选择器

java - 单词词典的哈希效率加倍

java - 如何使用未索引字段过滤存储在 "Query"类型中的结果?