Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: lazy, loading, proxy

Что означает lazy-loading в JPA?

Вопрос проверяет понимание загрузки сущностей, работы прокси и влияния ORM на производительность.

Короткий ответ

Lazy-loading означает, что связанные данные загружаются не сразу, а при первом обращении к ним. Это позволяет избежать лишних запросов к базе данных. По умолчанию многие связи в JPA являются lazy. Реализация обычно основана на прокси-объектах. При неправильном использовании может приводить к LazyInitializationException.

Длинный ответ

Lazy-loading — один из ключевых механизмов оптимизации в ORM.

Определение

Lazy-loading — это стратегия загрузки, при которой связанные сущности подгружаются только при фактическом обращении к ним.

Как это работает

Когда сущность загружается:

  1. Основная сущность загружается сразу

  2. Связанные объекты заменяются прокси

  3. Реальный запрос выполняется при первом доступе

Пример:

@Entity
class Order {

    @ManyToOne(fetch = FetchType.LAZY)
    private Customer customer;
}

Запрос к order.getCustomer():

  • вызывает дополнительный SQL

  • только при активном persistence context

Зачем нужен lazy-loading

  1. Снижение количества запросов

  2. Экономия памяти

  3. Быстрый старт работы с сущностью

Основные проблемы

  1. LazyInitializationException

    • Доступ вне транзакции

    • Закрыт EntityManager

  2. N+1 проблема

    • Много отдельных запросов

    • Плохая производительность

Как с этим работать

  1. Использовать join fetch

  2. Настраивать fetch = EAGER осознанно

  3. Загружать данные в нужных границах транзакции

Вывод

Lazy-loading — мощный инструмент оптимизации, но требует понимания жизненного цикла транзакций и сущностей. Использовать его нужно осознанно.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#lazy

#loading

#proxy

Подпишись на Java Developer в телеграм