В Hibernate механизм ленивой загрузки (lazy loading) по умолчанию загружает связанные сущности только при первом обращении к ним, что экономит ресурсы. Чтобы принудительно отключить ленивую загрузку и сделать загрузку жадной (eager loading), можно:
Каким образом можно принудительно отключить механизм ленивой загрузки в Hibernate?
В Hibernate механизм ленивой загрузки (lazy loading) по умолчанию загружает связанные сущности только при первом обращении к ним, что экономит ресурсы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Hibernate механизм ленивой загрузки (lazy loading) по умолчанию загружает связанные сущности только при первом обращении к ним, что экономит ресурсы. Чтобы принудительно отключить ленивую загрузку и сделать загрузку жадной (eager loading), можно:
- Использовать аннотацию
@OneToMany(fetch = FetchType.EAGER)или аналогичную сFetchType.EAGERдля нужного поля. - В HQL или Criteria запросах использовать
join fetchдля явного присоединения связанных сущностей. - Настроить глобально через конфигурацию, но это не рекомендуется, так как может привести к избыточной загрузке данных.
Пример:
@Entity
public class Author {
@OneToMany(fetch = FetchType.EAGER)
private Set<Book> books;
}
Или в запросе:
String hql = "FROM Author a JOIN FETCH a.books WHERE a.id = :id";