我设计了一个数据模型,其中有父对象和子对象(一对多)。首先,我手动完成所有工作,并将父母的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)”)
我知道这个孩子存在于这个父母身上。也许有人帮助我?我已经研究了这个,没有出现......
答案 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);