LazyLoadingException - это исключение, которое возникает в Hibernate при попытке доступа к свойству или коллекции объекта, которая не была инициализирована из базы данных.
В Hibernate существует два режима загрузки объектов: lazy loading (ленивая загрузка) и eager loading (жадная загрузка). Ленивая загрузка означает, что свойства объекта или элементы коллекции будут загружаться только по мере непосредственного доступа к ним. Жадная загрузка, напротив, означает, что все свойства объекта или коллекции будут загружены одновременно с основным объектом.
Когда происходит ленивая загрузка, свойства объекта или элементы коллекции не загружаются до тех пор, пока к ним явно не обратятся. Если попытаться получить доступ к свойству или коллекции до её инициализации, то возникнет исключение LazyInitializationException.
Пример кода, который может вызвать LazyInitializationException:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
// Загружаем объект из базы User user = (User) session.load(User.class, 1L);
tx.commit();
session.close();
// Попытка получить доступ к коллекции до её инициализации System.out.println(user.getOrders().size());
// вызовет LazyInitializationException
В данном примере мы получаем объект User из базы данных в режиме ленивой загрузки. Затем, мы закрываем сессию Hibernate и пытаемся получить доступ к коллекции заказов пользователя до её инициализации. Это вызовет исключение LazyInitializationException.
Чтобы избежать этой ошибки, необходимо либо использовать жадный режим загрузки, либо явно инициализировать свойства объекта или элементы коллекции до того, как к ним обратятся.
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov