当我制作一个同时定义" gae.encoded-pk"one_answers" gae.pk-id"的类时,则更新了编码的pk,但ID仍然为null。没有例外,代码是Google文档中的直接复制糊剂,因此我对这里可能发生的事情感到不知所措。
类定义:
@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仍保持无效。
我还应该指出,这是使用Google Appengine Development套件在本地运行的。关于我如何调试的任何指示,这将不胜感激!
我找到了这个答案:
GAE JDO插件仅设置一个" Gae.pk-id"/" Gae.pk-name"字段,当它在数据存储中标记的字段中读取时(只需在SVN TRUNK中进行搜索,fetchfieldmanager,fetchfieldmanager就是唯一加载它的地方 - 当它做一个放置时,它不会设置它)。不知道它在1.x中做了什么,但是GAE自己的所有测试都像1.x一样通过2.x。但是,无论如何,"功能"并不是标准的JDO,所以对我来说一点也不感兴趣。
请参阅:无法使用GAE/J Datanucleus插件版本2.1.2