【问题标题】:Google App Engine Getting Object by the KeyGoogle App Engine 按键获取对象
【发布时间】:2026-02-21 18:25:01
【问题描述】:

我一直坚持通过 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")

并最终得到上述错误。

【问题讨论】:

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


    【解决方案1】:

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

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

    您应该只使用new Entity(cngKey)

    【讨论】:

      【解决方案2】:

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

      Datastore.put(cngEntity);
      

      【讨论】:

      • 其实我是保存到数据源的。抱歉,代码丢失了。