我设计了一个数据模型,其中有父对象和子对象(一对多)。首先,我手动完成了所有工作,并将 parent 的 ID 存储在子对象中以保持关系。然后我决定使用与应用引擎文档的关系。现在我有一个 ID 为 21 的 parent 和一个 ID 为 1 的 child (我假设 ID 为 1,因为这个 child 是唯一的,也是这个 parent 的第一个 child )。现在我正在尝试获取 key : child.getKey()
并且使用相同的字符串,我试图通过以下方式获取对象:
Child child = pm.getObjectById(Child.class, key);
不知何故我得到这个错误: 警告:/admin.jsp javax.jdo.JDOObjectNotFoundException: 无法检索具有键 Child("Parent(21)/Child(1)") 的实体 Child
我知道这个 child 存在于这个 parent 中。也许有人可以帮助我吗?我已经对此进行了研究,但没有任何结果...
最佳答案
经过数小时的尝试,我找到了解决方案。有两种方法可以解决这个问题。首先,如果你想获得一个带有键的子对象,请确保该键不是字符串。它应该是一个 key (com.google.appengine.api.datastore.Key)。您可以通过两种不同的方式获取此 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);
关于java - 尝试在 GAE 中获取子对象时出现 JUDO ObjectNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845265/