Движок приложения не сохраняет список, когда он аннотирован с помощью serializable и defaultFetchGroup set - PullRequest
2 голосов
/ 06 сентября 2010

Я пытаюсь сохранить Jdo, в котором есть список. Когда список помечается

@Persistent (defaultFetchGroup = "true")

Работает нормально, но когда у меня

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

Не хранит список. Кто-нибудь знает почему? Что мне делать, если у меня есть список пользовательских объектов, которые я хочу сохранить, помечаю ли я их как сериализуемые или нет?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

@Persistent(serialized = "true", defaultFetchGroup="true") является правильной аннотацией.

Также, когда вы меняете что-то на элемент списка, вы должны вызывать JDOHelper.makeDirty(this, "yourSerializedField");, потому что, когда он повторно сериализует элемент, он смотрит только на ссылку, а не на ссылку.на каждый элемент (он использует .equals объекта) Надеюсь, что это помогает

1 голос
/ 08 января 2011

Я вижу 3 случая:

  1. тип ядра (List<String>, List<Date> и т. Д.): Вы должны использовать @Persistent
  2. a @PersistenceCapable class (List<MyPersistenceCapableClass>): Вы должны использовать @Persistent, это отношение Один-ко-многим case
  3. не тип ядра, не класс @PersistenceCapable, а @Serializable one (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 на автоматическую выборку всех объектов списка ине ждать доступа к полю (ленивая загрузка).

...