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

时间:2012-11-07 07:13:12

标签: google-app-engine google-cloud-datastore jdo datanucleus

当我创建一个定义“gae.encoded-pk”和“gae.pk-id”持久化的类时,encode-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;

我坚持这样:

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

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

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

1 个答案:

答案 0 :(得分:1)

我找到了这个答案:

GAE JDO插件只在从数据存储区读入标有该字段的字段时才设置“gae.pk-id”/“gae.pk-name”字段(只需在SVN中继中搜索,FetchFieldManager是它加载的唯一地方 - 当它执行PUT时它不会设置它。不知道它在1.x中做了什么,但是所有GAE自己的测试都在2.x中传递,就像在1.x中那样。但是那个“特征”无论如何都不是标准的JDO,所以对我没什么兴趣。

请参阅:Unable to get ID of newly-created JDO persistent entity using GAE/J DataNucleus plug-in version 2.1.2