¿Se realizará la operación JOIN FETCH al usar carga perezosa?
sobes.tech AI
Respuesta de la IA
La operación JOIN FETCH en JPA se utiliza para cargar de manera ansiosa las entidades relacionadas, es decir, carga los objetos relacionados junto con la consulta principal. La anotación o configuración de carga perezosa (FetchType.LAZY) indica que los datos relacionados solo deben cargarse bajo demanda.
Si en la consulta se usa JOIN FETCH, las entidades relacionadas se cargarán de inmediato, independientemente de lo que indique la anotación de carga perezosa. Es decir, JOIN FETCH anula la estrategia de carga y obliga a realizar una carga ansiosa.
Por lo tanto, al usar JOIN FETCH, la operación se ejecutará y los datos relacionados se cargarán de inmediato, a pesar de la carga perezosa establecida en el mapeo.
Ejemplo:
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();
// Los hijos se cargarán de inmediato, incluso si en Parent.children está establecido FetchType.LAZY