java - 尝试在 GAE 中获取子对象时出现 JUDO ObjectNotFoundException

标签 java google-app-engine jdo

我设计了一个数据模型,其中有父对象和子对象(一对多)。首先,我手动完成了所有工作,并将 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/

相关文章:

java - getText() 总是从动态创建的 Chip 组件返回空字符串?

尝试查找文件中最常出现的单词时,Java ArrayIndexOutOfBoundsException 不断出现

java - Google blobstore 和 HTTP 206 响应

google-app-engine - Google App Engine python 2.7 中出现 "Release unlocked lock"错误,threadsafe=No

java - 在获取对象 (java) 时减少 Google App Engine 中的 datastore_v3.Next 调用,可能吗?

java - 为 JDO 实体选择某个 "column"

java - 在 TableViewer 上选择 SWT 图形颜色后消失

java - -XX :+UseNUMA affects JVM performance for systems with only one node?如何

google-app-engine - App EngineFlex 是否会自动进行 gzip 响应?

java - 在谷歌应用引擎数据存储中查询聚合 ("group by"的替代策略