Sobes.tech
Назад к вопросам
Middle
65

Будет ли выполнена операция JOIN FETCH при использовании ленивой загрузки?

Компании, где спрашивали
СБЕРСБЕР

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

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