Спящий режим и сериализация - PullRequest
2 голосов
/ 06 июля 2011

В нашем приложении мы имеем двойное постоянство. Во-первых, сущность может быть сохранена онлайн в БД MySQL (мы используем Hibernate), во-вторых, сущность может быть сохранена локально посредством сериализации.

Сущность, о которой я говорю, является объектом класса User, который содержит объект KnowledgeBase, а KnowledgeBase содержит два списка сущностей (List<Card> и List<Deck>).

Обе персистенции отлично работают в отдельности, но возникают проблемы, когда я пытаюсь десериализовать сериализованный User объект, который я загрузил из базы данных, то есть который был выполнен через Hibernate хотя бы один раз (ну, на самом деле, дважды) ,

Я заметил, что ArrayList внутри KnowledgeBase заменены на PersistentBag. Может ли это быть источником моей проблемы?

Другое предположение может заключаться в том, что ленивая загрузка вызывает эти проблемы ... Есть ли способ сказать Hibernate полностью загрузить объект в какой-то момент? (Помимо энергичной загрузки ...)

1 Ответ

4 голосов
/ 06 июля 2011

Да, Hibernate.initialize(..) инициализирует объекты и коллекции.

Затем при необходимости вы можете заменить коллекции на обычные java.util с помощью конструктора копирования: setList(new ArrayList(list))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...