Гибернация отложенной загрузки в отдельные объекты - PullRequest
17 голосов
/ 05 октября 2010

Я создал класс, в котором я установил некоторые из его полей (других объектов) для загрузки LAZY. Теперь мне нужно использовать этот объект после того, как он был отсоединен от сеанса, поэтому мне, очевидно, нужно убедиться, что все поля, которые мне нужны, заполнены перед его отсоединением. Я попытался просто вызвать получателей на эти ленивые поля, но это не сработало. У кого-нибудь есть идеи, как заставить эти поля загружаться?

Ответы [ 4 ]

13 голосов
/ 05 октября 2010
Hibernate.initialize(yourObject)

принудительно инициализирует объект / коллекцию, которые ему передаются.Для этого вам нужен активный сеанс.

Если сущность отсоединена, вам придется повторно присоединить объект (используя merge(..)) к активному сеансу, а затем инициализировать его.

3 голосов
/ 05 октября 2010

Вы можете присоединить его к сеансу.Это нормальный способ.

session.update(yourObject); //This reattachs the object to the current session.
yourObject.someGetter(); //This will work now.
2 голосов
/ 20 ноября 2014
<prop key="hibernate.enable_lazy_load_no_trans">true</prop> 

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

1 голос
/ 22 июня 2011

Я знаю, что вы запросили Hibernate, но EclipseLink имеет эту функцию, поэтому, возможно, стоит проверить, используете ли вы JPA и не привязаны к конкретной реализации.Однако вы можете столкнуться с другими проблемами при переходе на EclipseLink ..

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