Hardhibernatelazy
Что такое lazy loading в Hibernate?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Lazy loading — связанные сущности загружаются при первом обращении, не сразу. Реализация через Hibernate proxy. Цель — производительность, не тянуть всё дерево.
@Entity
public class Order {
@ManyToOne(fetch = FetchType.LAZY)
private User user; // не загружается, пока не обратишься
}
// JOIN FETCH — подтянуть в одном запросе
@Query("SELECT o FROM Order o JOIN FETCH o.user")
List<Order> findAllWithUsers();Проблемы:
- LazyInitializationException — сессия закрыта, а proxy разрешаешь;
- N+1 problem — итерация по orders с
getUser()= N SELECTs; - Решения:
JOIN FETCH,@EntityGraph,@BatchSize, DTO projections; - Open Session in View — anti-pattern, но Spring Boot включает по умолчанию (
spring.jpa.open-in-view=false).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.