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 подскажет развёрнутый ответ в реальном времени.