Back to questions
СБЕР
Middle
67
Будет ли выполнена операция JOIN FETCH при использовании ленивой загрузки?
Companies where asked
Answer from AI
sobes.tech AI
Операция JOIN FETCH в JPA используется для жадной загрузки связанных сущностей, то есть она загружает связанные объекты сразу вместе с основным запросом. При этом аннотация или настройка ленивой загрузки (FetchType.LAZY) указывает, что связанные данные должны загружаться только по требованию.
Если в запросе используется JOIN FETCH, то связанные сущности будут загружены сразу, независимо от того, что указано в аннотации ленивой загрузки. То есть JOIN FETCH переопределяет стратегию загрузки и заставляет выполнить жадную загрузку.
Таким образом, при использовании JOIN FETCH операция будет выполнена и связанные данные будут загружены сразу, несмотря на ленивую загрузку, заданную в маппинге.
Пример:
String jpql = "SELECT p FROM Parent p JOIN FETCH p.children WHERE p.id = :id";
Parent parent = entityManager.createQuery(jpql, Parent.class)
.setParameter("id", 1L)
.getSingleResult();
// Дети будут загружены сразу, даже если в Parent.children стоит FetchType.LAZY