Back to questions
Aston
СБЕР дейвайсы
Junior — Middle
62
Что означает исключение LazyInitializationException и в каких ситуациях оно возникает при работе с ORM?
Companies where asked
Answer from AI
sobes.tech AI
Исключение LazyInitializationException возникает в ORM (например, Hibernate), когда пытаются получить доступ к лениво загруженному (lazy) связанному объекту вне сессии или транзакции, в которой этот объект был загружен.
Это происходит, если объект с ленивой загрузкой был загружен, но сессия уже закрыта, и ORM не может подгрузить связанные данные из базы. Например, если у вас есть сущность с коллекцией, помеченной как fetch = FetchType.LAZY, и вы пытаетесь обратиться к этой коллекции после закрытия сессии, то получите LazyInitializationException.
Чтобы избежать этой ошибки, можно:
- Использовать жадную загрузку (
FetchType.EAGER), если это оправдано. - Открывать сессию на время работы с объектами (Open Session in View).
- Явно инициализировать ленивые коллекции или свойства внутри сессии (например, с помощью
Hibernate.initialize()или запросов с join fetch).
Пример:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = session.get(User.class, userId); // user.getOrders() - ленивое поле
tx.commit();
session.close();
// Здесь вызов user.getOrders() вызовет LazyInitializationException, так как сессия закрыта
List<Order> orders = user.getOrders();