我正在使用JDO爲Datastore創建Java GAE應用程序。帶祖先密鑰的PersistenceManager.getObjectById
我有這2類用戶和文件夾。
@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(龍),所以我試圖做到這一點:
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)
方法,這可能適合在這裏,但它只是一個查詢,而不是一個「密鑰查找」...
任何人都知道如何做到這一點?
Thanks @dragonx。請你能提供一個「查詢符合該id的實體」的例子嗎? – MikO 2013-03-25 16:42:56