Google App Engine通过密钥获取对象

时间:2013-10-07 19:41:23

标签: java google-app-engine java-ee persistence

我坚持使用id来设置持久化对象。我收到一个错误:

com.google.appengine.api.datastore.EntityNotFoundException: No entity was found matching the key: CNG("T78")

我将下面的对象持久存储到数据存储中:

Key cngKey = KeyFactory.createKey("CNG", jsonCNG.cNGID);
Entity cngEntity = new Entity("CNG", cngKey);
cngEntity.setProperty("cng_name", jsonCNG.cNGName);
cngEntity.setProperty("cng_type", jsonCNG.cNGType);
cngEntity.setProperty("cng_content", cng);

这里cng是一个json字符串。我用字符串设置了密钥:cNGID。我正在尝试使用相同的id来获取对象。

Key cngKey = KeyFactory.createKey("CNG", "T78")

并最终得到上述错误。

2 个答案:

答案 0 :(得分:1)

您似乎没有将其保存到数据存储区。

Datastore.put(cngEntity);

答案 1 :(得分:1)

构造函数new Entity("CNG", cngKey)正在使用kind和父键定义实体。然后,当您尝试检索它时,您不提供父密钥:KeyFactory.createKey("CNG", "T78")。这不起作用 - 您必须在两个地方都提供父键。

注意 - 在定义实体组时使用定义实体父级,这在使用事务时非常重要。你可能不想要那个?

相反,您应该只使用new Entity(cngKey)