FetchType.LAZY в JPA означает отложенную загрузку связанных сущностей. Вместо загрузки всей связанной коллекции или отдельной сущности при получении основной сущности, JPA создает прокси-объект. Фактическая загрузка данных из базы произойдет только при первом обращении к полям или методам прокси-объекта.
Это позволяет:
По умолчанию для большинства связей (@OneToMany, @ManyToMany) используется FetchType.LAZY, а для @OneToOne И @ManyToOne — FetchType.EAGER. Можно явно указать тип загрузки:
java
Проблемы с FetchType.LAZY:
Для решения этих проблем можно использовать:
Явное получение связанных данных с помощью JOIN FETCH в JPQL:
java
Настройки провайдера JPA (например, использование батчинга).
Аннотация @Fetch(FetchMode.JOIN) или @Fetch(FetchMode.SELECT) в Hibernate.