Спящий режим ленивая загрузка в отдельных объектах
Я создал класс, в котором я установил некоторые из его полей (других объектов) для загрузки LAZY. Теперь мне нужно использовать этот объект после того, как он был отсоединен от сеанса, поэтому я, очевидно, должен убедиться, что все поля, которые мне нужны, заполняются до его отсоединения. Я пробовал просто называть геттеры на эти ленивые поля, но это, похоже, не сработало. У кого-нибудь есть идея, как заставить эти поля загружаться?
Ответы
Ответ 1
Hibernate.initialize(yourObject)
принудительно инициализирует передаваемый ему объект/коллекцию. Для этого вам нужен активный сеанс.
Если объект отсоединен, вам придется повторно присоединить объект (используя merge(..)
) к активному сеансу и затем инициализировать его.
Ответ 2
Вы можете подключить его к сеансу. Это нормальный путь.
session.update(yourObject); //This reattachs the object to the current session.
yourObject.someGetter(); //This will work now.
Ответ 3
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
вы можете добавить эту строку в свой конфигурационный файл, она может отображать ваши ленивые объекты, даже если они отсоединены, но следует использовать пост 4.1.7, так как есть проблема с утечкой соединения с предыдущей версией .see здесь
Ответ 4
Я знаю, что вы попросили Hibernate, но EclipseLink имеет эту функцию, поэтому, возможно, стоит проверить, используете ли вы JPA, а не привязаны к конкретной реализации. Вы можете столкнуться с другими проблемами, переносящимися на EclipseLink, хотя..