Sobes.tech
Назад к вопросам
Junior — Middle
93

Каким образом реализуется откладываенная загрузка связанных данных при использовании FetchType.LAZY в JPA?

Компании, где спрашивали
Ifellow

Ответ от нейросети

sobes.tech AI

В JPA аннотация FetchType.LAZY указывает, что связанные данные (например, коллекции или связанные сущности) не должны загружаться сразу при загрузке основной сущности, а только при первом обращении к этим данным.

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

Когда в коде происходит обращение к такому полю (например, вызов метода или итерация по коллекции), прокси автоматически выполняет запрос к базе данных, загружая необходимые данные.

Пример:

@Entity
public class Author {
    @OneToMany(fetch = FetchType.LAZY)
    private List<Book> books;

    // геттеры и сеттеры
}

// При загрузке Author книги не загружаются сразу
Author author = entityManager.find(Author.class, 1L);

// При первом вызове author.getBooks() происходит запрос к БД для загрузки книг
List<Book> books = author.getBooks();

Таким образом, FetchType.LAZY помогает оптимизировать производительность, загружая связанные данные только по необходимости.