Java 试图在GAE中获取子对象时发生JDOObjectNotFoundException

Java 试图在GAE中获取子对象时发生JDOObjectNotFoundException,java,google-app-engine,jdo,Java,Google App Engine,Jdo,我设计了一个数据模型,其中有父对象和子对象(一对多)。首先,我手动完成所有工作,并将父对象的ID存储在children对象中以保持关系。然后我决定使用与appengine文档的关系。现在我有一个ID为21的父项和一个ID为1的子项(我假设ID为1,因为这个子项是这个父项的唯一子项和第一个子项)。现在,我正在尝试获取密钥,如下所示: child.getKey() 我试图用相同的字符串获取对象: Child=pm.getObjectById(Child.class,key) 不知怎的,我得到了这个错

我设计了一个数据模型,其中有父对象和子对象(一对多)。首先,我手动完成所有工作,并将父对象的ID存储在children对象中以保持关系。然后我决定使用与appengine文档的关系。现在我有一个ID为21的父项和一个ID为1的子项(我假设ID为1,因为这个子项是这个父项的唯一子项和第一个子项)。现在,我正在尝试获取密钥,如下所示: child.getKey()

我试图用相同的字符串获取对象:

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

不知怎的,我得到了这个错误: 警告:/admin.jsp javax.jdo.JDOObjectNotFoundException:无法检索具有关键子级(“父级(21)/子级(1)”的同类子级实体


我知道这个孩子存在于这个父母身上。也许有人能帮我吗?我已经对此进行了研究,但没有发现任何结果……

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

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

然后您可以轻松使用:

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

您是如何指出
孩子
应该是父母的孩子的?我按照文档中的说明做了所有事情,但最终我找到了解决方案,文档中确实没有正确解释。非常感谢。工作起来很有魅力。遗憾的是,GAE文档中没有很好地解释。节省了我很多宝贵的时间
Child child = pm.getObjectById(Child.class, key);