我正在尝试存储一个包含List的Jdo。列表用
注释时@Persistent (defaultFetchGroup = "true")
它工作正常,但是当我有
时@Persistent (serializable = "true", defaultFetchGroup = "true")
它不存储列表。有谁知道为什么?当我有一个我想要存储的自定义对象列表时,如何将它们标记为可序列化?
答案 0 :(得分:1)
我看到3个案例:
List<String>
,List<Date>
等等):您应该使用@Persistent
@PersistenceCapable
班级(List<MyPersistenceCapableClass>
):您应该使用@Persistent
,这是One-To-Many relationship案例@PersistenceCapable
类,也不是@Serializable
类(List<MySerializableClass>
):您必须使用@Persistent (serializable = "true")
使用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)
希望这有帮助