2009-09-15 3 views
0

Я сериализую объект, имеющий глубокую иерархию объектов.Нежелательная выборка объекта

После десериализации я могу получить доступ только к тем полям, которые были доступны в объекте до сериализации. Для отдыха я получаю LazyInitializationException.

class A { 
    List<B> objs 
} 

class B { 
    C c 
} 

class C { 
    D d 
} 

Первоначально я использовал, чтобы получить LazyInitializationException при доступе a.objs * .c Тогда я выполнил цикл до сериализации: a.objs.each {it.c} Теперь я получаю LazyInitializationException на a.objs * .cd и не a.objs * .c

Как я могу убедиться, что объект извлекает каждую ссылку из БД до сериализации?

ответ

0

Единственный способ, которым я могу думать, - это пройти через графический объект, инициализирующий любые ленивые коллекции, которые вы найдете.

Единственный другой способ - использовать замыкание отображения в каждом классе домена для отключения ленивой загрузки.

Не удалось ли обновить объект из базы данных после десериализации с помощью метода refresh()?

+0

В настоящее время я после прогулки по подходу, но каждый день я получаю LazyInitializationException для нового случая использования и добавить новый обход :) Я не могу отключить отложенную загрузку, так как я просто хочу в глубину стремится выборки только при сериализации & ни в одном запросе из приложения. Сериализованный объект состоит из снимков истории. Например, например, мне может понадобиться найти адрес человека один год назад, а не текущий адрес. –

Смежные вопросы