当我创建一个定义“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开发工具包在本地运行的。任何关于我如何调试这个的指针都将非常感激!
答案 0 :(得分:1)
我找到了这个答案:
GAE JDO插件只在从数据存储区读入标有该字段的字段时才设置“gae.pk-id”/“gae.pk-name”字段(只需在SVN中继中搜索,FetchFieldManager是它加载的唯一地方 - 当它执行PUT时它不会设置它。不知道它在1.x中做了什么,但是所有GAE自己的测试都在2.x中传递,就像在1.x中那样。但是那个“特征”无论如何都不是标准的JDO,所以对我没什么兴趣。