在makePersistent上没有填充Datanucleus gae.pk-id

use*_*588 5 google-app-engine jdo datanucleus google-cloud-datastore

当我创建一个定义"gae.encoded-pk"和"gae.pk-id"持久化的类时,encoded-pk会更新,但id仍然为null.没有例外被抛出,代码是谷歌文档中的直接复制粘贴,所以我对这里可能发生的事情感到茫然.

该类定义:

@PersistenceCapable 
public class MyClass {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
    private String encodedKey;

    @Persistent
    @Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
    private Long keyId;
Run Code Online (Sandbox Code Playgroud)

而且我坚持这样:

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
    pm.makePersistent(myInstance);
    // myInstance = pm.makePersistent(myInstance); - Produces the same result.
} finally {
    pm.close();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用调试器来逐步执行此代码,但即使在关闭持久性管理器之后,keyId仍为null.

我还应该指出,这是使用google appengine开发工具包在本地运行的.关于我如何调试这个的任何指针将不胜感激!

cra*_*s84 1

我找到了这个答案:

GAE JDO 插件仅在从数据存储中读取标有该字段的字段时设置“gae.pk-id”/“gae.pk-name”字段(只需在 SVN 主干中进行搜索,FetchFieldManager 是唯一的位置)它的加载位置 - 当它执行 PUT 时不会设置它)。不知道它在 1.x 中做了什么,但 GAE 自己的所有测试都在 2.x 中通过,就像在 1.x 中一样。但无论如何,这个“功能”并不是标准的 JDO,所以我对此没什么兴趣。

请参阅:无法使用 GAE/J DataNucleus 插件版本 2.1.2 获取新创建的 JDO 持久实体的 ID