Ленивая инициализация или Lazy Initialization в Hibernate

Предположим, что у нас есть метод для получения объекта книги по заданному ID. Для него мы задали маппинг <many-to-one>, поэтому объект издателя, связанный с ним, должен быть также получен.
Но когда мы пытаемся получить доступ к объекту издателя через book.getPublisher() извне метода, кидается исключение.
Если мы создадим код доступа внутри try-блока в теле метода, все ок. Тогда каков смысл исключения? Это все из-за того, что Hibernate не загрузит наш объект издателя из базы данных при первом доступе. В Hibernate это называется "lazy initialization", что может помочь избежать ненужных запросов к базе данных и тем самым повысив производительность. Поскольку издатель был впервые затронут снаружи сессии (которая была закрыта), породилось исключение.
Если мы хотим, чтобы был доступ к объекту издателя вне сессии, есть два возможных решения проблемы. Первое - инициализировать издателя явно, вызовом метода Hibernate.initialize(). Этот код принудит загрузку объекта из базы.
Второй вариант - выключить ленивую загрузку для этой ассоциации. Это может снизить производительность, поскольку объект издателя будет загружаться вместе с объектом книги каждый раз.
Материалы, которые могут вас заинтересовать
- Hibernate. Many-to-one ассоциации
- Java. Object-oriented mapping. Работаем с чистым Hibernate без прямого использования JDBC.
- Выражения INSERT, UPDATE, DELETE
- Что такое триггер (database trigger)?
- Что такое представление (view)? Каково предназначение?
- Как повысить производительность базы данных?
- Как реализовать one-to-one, one-to-many, many-to-many отношения во время проектирования таблиц?
- Что такое нормализация? Когда следует проводить денормализацию?
- Что такое sub-query? Как он влияет на производительность?







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