尝试在GAE中获取子对象时出现JDOObjectNotFoundException

时间:2011-10-21 05:19:18

标签: java google-app-engine jdo

我设计了一个数据模型,其中有父对象和子对象(一对多)。首先,我手动完成所有工作,并将父母的ID存储在子对象中以保持关系。然后我决定使用与app引擎的文档关系。现在我有一个ID为21的父母和一个ID为1的孩子(我想ID为1,因为这个孩子是这个孩子的唯一和第一个孩子)。现在我想把钥匙当作: child.getKey()

使用相同的String我试图通过以下方式获取对象:

Child child = pm.getObjectById(Child.class,key);

不知何故,我收到此错误: 警告:/admin.jsp javax.jdo.JDOObjectNotFoundException:无法检索具有键Child的类型Child的实体(“Parent(21)/ Child(1)”)

我知道这个孩子存在于这个父母身上。也许有人帮助我?我已经研究了这个,没有出现......

1 个答案:

答案 0 :(得分:4)

我已经在尝试了所有可能性的数小时后找到了解决方案。有两种方法可以解决这个问题。首先,如果您想使用密钥获取子对象,请确保该密钥不是String。它应该是一个Key(com.google.appengine.api.datastore.Key)。您可以通过两种不同的方式获得此密钥:

Key key = new KeyFactory
    .Builder(Parent.class.getSimpleName(), ParentID)
    .addChild(Child.class.getSimpleName(), ChildID).getKey();

Key key = KeyFactory.stringToKey(keyString); //you can obtain keyString with KeyFactory.keyToString(ChildObject.getKey());

然后你可以轻松使用:

Child child = pm.getObjectById(Child.class, key);