我刚刚学习 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/