【问题标题】:JDOObjectNotFoundException when trying to get a child object in GAE尝试在 GAME 中获取子对象时出现 JD ObjectNotFoundException
【发布时间】:2011-12-12 07:34:19
【问题描述】:

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

我尝试使用相同的字符串来获取对象:

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

不知怎的,我得到了这个错误: 警告:/admin.jsp javax.jdo.JDOObjectNotFoundException:无法检索具有键 Child("Parent(21)/Child(1)") 的 Child 类型实体

我知道这个孩子存在于这个父母身上。也许有人可以帮助我吗?我对此进行了研究,但没有任何结果...

【问题讨论】:

  • 你如何表明Child 应该是Parent 的子级?
  • 我按照文档所说的做了一切,但最终我找到了解决方案,但文档中确实没有正确解释。

标签: java google-app-engine jdo


【解决方案1】:

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

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);

【讨论】:

  • 非常感谢。奇迹般有效。可悲的是,在 GAE 文档中没有完全正确地解释。节省了我很多宝贵的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多