Java Google appengine datastore.get会在现有实体上抛出EntityNotFoundException

时间:2014-01-13 08:28:19

标签: java google-app-engine exception google-cloud-datastore

寻找想法当我试图通过其密钥获取我所知道的实体时,我怎么会得到一个EntityNotFoundException。

Screenshot showing admin console with Entity and exception

正如您在屏幕截图中看到的那样,我有一个类型“限定符”的实体,其ID /名称为99_999_9993#5678,但是获得了一个例外,说“找不到与该键匹配的实体:限定符(”99_999_9993# 5678 “)”

我不认为它是相关的,只是为了完整性......: 实体在事务内创建,并且还具有祖先(实体组)。 get请求是基于手动创建的密钥的简单非跨国获取。

有什么想法为什么我得到这个EntityNotFoundException而不是获取实体?

1 个答案:

答案 0 :(得分:0)

事实证明,我认为不相关的实际上非常相关。 当我创建实体时,我使用KeyFactory为其祖先创建了一个键,但是当我得到它时,我只使用了它自己的一部分键。

我一改成使用

Key groupKey=KeyFactory.createKey(Kinds.Group, group_id);
Key key=KeyFactory.createKey(groupKey,Kinds.Qualifier, qualifier_id );

而不是

Key key=KeyFactory.createKey(Kinds.Qualifier, qualifier_id );

它开始按预期返回我的实体。

所以基本上重要的是要注意,数据存储区查看器ID /名称只显示键名的本地部分,忽略了存在祖先(实体组)这一事实的任何迹象......