Sobes.tech
Middle

A operação JOIN FETCH será executada ao usar carregamento preguiçoso?

sobes.tech IA

Resposta da IA

A operação JOIN FETCH no JPA é usada para carregar de forma ansiosa as entidades relacionadas, ou seja, ela carrega os objetos relacionados juntamente com a consulta principal. A anotação ou configuração de carregamento preguiçoso (FetchType.LAZY) indica que os dados relacionados devem ser carregados apenas sob demanda.

Se na consulta for usado JOIN FETCH, as entidades relacionadas serão carregadas imediatamente, independentemente do que estiver indicado na anotação de carregamento preguiçoso. Ou seja, JOIN FETCH sobrescreve a estratégia de carregamento e força um carregamento ansioso.

Assim, ao usar JOIN FETCH, a operação será executada e os dados relacionados serão carregados imediatamente, apesar do carregamento preguiçoso definido no mapeamento.

Exemplo:

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();
// Os filhos serão carregados imediatamente, mesmo que em Parent.children esteja definido FetchType.LAZY