在使用serializable和defaultFetchGroup设置注释时,App引擎不存储List

时间:2010-09-06 11:15:14

标签: java google-app-engine jdo

我正在尝试存储一个包含List的Jdo。列表用

注释时
@Persistent (defaultFetchGroup = "true")

它工作正常,但是当我有

@Persistent (serializable = "true", defaultFetchGroup = "true")

它不存储列表。有谁知道为什么?当我有一个我想要存储的自定义对象列表时,如何将它们标记为可序列化?

2 个答案:

答案 0 :(得分:1)

我看到3个案例:

  1. 核心类型(List<String>List<Date>等等):您应该使用@Persistent
  2. @PersistenceCapable班级(List<MyPersistenceCapableClass>):您应该使用@Persistent,这是One-To-Many relationship案例
  3. 不是核心类型既不是@PersistenceCapable类,也不是@Serializable类(List<MySerializableClass>):您必须使用@Persistent (serializable = "true")
  4. 使用serializable = "true"时,您需要致电JDOHelper.makeDirty以通知JDO 每次您修改列表:

    MySerializableClass serializableObject = new MySerializableClass();
    persistedObject.getMySerializableClassList().add(serializableObject);
    JDOHelper.makeDirty(persistedObject, "mySerializableClassList");
    

    note defaultFetchGroup = "true"参数用于告诉JDO自动获取列表中的所有对象,而不是等待访问该字段(懒惰)取)。

答案 1 :(得分:1)

@Persistent(serialized = "true", defaultFetchGroup="true")是正确的注释。

此外,当您将某些内容更改为列表元素时,您应该调用JDOHelper.makeDirty(this, "yourSerializedField");,因为当它重新序列化元素时,它只查看引用而不是每个项目(它使用对象的.equals) 希望这有帮助