PersistenceManager.getObjectById with ancestor key

1 人关注

我正在创建一个Java GAE应用程序,使用JDO作为数据存储。

我有这2个类User和Folder。

@PersistenceCapable
public class User {    
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key key;
  @Persistent
  private Folder rootFolder;    
  //getters and setters...
@PersistenceCapable
public class Folder {   
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key key;
  @Persistent
  private List<Folder> subfolders;    
  //getters and setters...

我想检索一个文件夹的ID(Long),所以我尝试这样做。

Key key = KeyFactory.createKey(Folder.class.getSimpleName(), 371);
folder = this.pm.getObjectById(Folder.class, key);

但这并不奏效。它抛出了这个异常。

org.datanucleus.exceptions.NucleusObjectNotFoundException: 
Could not retrieve entity of kind Folder with key Folder(371)

我想这是因为文件夹的也包含了它的祖先的键,但我的问题是,我不能知道一个文件夹的所有祖先路径,因为它的ID。

我可以知道的是路径中的第一个祖先,即拥有根文件夹的用户。我发现有一个Query.setAncestor(Key) 方法,可能适合这里,但它只适用于查询,而不是 "键查找"......

有谁知道如何做到这一点?

java
google-app-engine
google-cloud-datastore
jdo
datanucleus
MikO
MikO
发布于 2013-03-26
1 个回答
dragonx
dragonx
发布于 2013-03-26
已采纳
0 人赞同

我不熟悉Java方面的事情,但数据存储在Java/Python上基本上是一样的。