Google app engine GAE JDO:第二次读取时默认获取组成员为null

Google app engine GAE JDO:第二次读取时默认获取组成员为null,google-app-engine,jdo,datanucleus,Google App Engine,Jdo,Datanucleus,我有一个这样的持久类: @PersistenceCapable(detachable = "true") public class MyClass { ... @Persistent(defaultFetchGroup = "true") @Element(dependent = "true") private Set<Key> mySet = new HashSet<Key>(); ... } 奇怪的是,在服务器重新启动后第一

我有一个这样的持久类:

@PersistenceCapable(detachable = "true")
public class MyClass {
    ...
    @Persistent(defaultFetchGroup = "true")
    @Element(dependent = "true")
    private Set<Key> mySet = new HashSet<Key>(); 
    ...
}
奇怪的是,在服务器重新启动后第一次这样就可以正常工作。但是,第二次进行查询时,mySet仍然为null

我一直在和一个ArrayList做同样的尝试,但是运气不好。我完全不知道什么会导致这样的行为,所以任何关于什么可能是原因的模糊指示都将不胜感激

更新:


我找到了一个解决方案,但我不明白它为什么有效。如果我为用户添加一个复制构造函数,并在读取后复制实例,那么它的工作方式是一致的。我假设有一个缓存总是将同一个实例交还给我,但是在程序中,我找不到任何将角色设置为null的代码。这可能是我忽略的一个副作用,还是有一个更基本的问题我不了解?

我还应该注意,使用datastore viewer,我可以看到数据没有更改。您能否确认“key”的值在过渡期间没有更改?那么getObjectById之后对象处于什么状态?getObjectState(obj)告诉您,日志也是如此。当您尝试访问对象的字段时,对象处于什么状态?日志告诉你更多的方法,引用它就是方法。还要说明您正在使用的GAE JDO插件的版本(1.0.10?2.0.1?,2.1.1?)
pm.getFetchPlan().setGroup(FetchPlan.DEFAULT);
pm.getFetchPlan().setMaxFetchDepth(1);
myInstance = pm.getObjectById(MyClass.class, key);