L'opération JOIN FETCH sera-t-elle effectuée lors de l'utilisation du chargement paresseux?
sobes.tech IA
Réponse de l'IA
L'opération JOIN FETCH dans JPA est utilisée pour charger de manière eager les entités liées, c'est-à-dire qu'elle charge les objets liés immédiatement avec la requête principale. L'annotation ou la configuration de chargement lazy (FetchType.LAZY) indique que les données liées ne doivent être chargées que sur demande.
Si la requête utilise JOIN FETCH, les entités liées seront chargées immédiatement, indépendamment de ce qui est indiqué dans l'annotation de chargement lazy. Autrement dit, JOIN FETCH redéfinit la stratégie de chargement et force un chargement eager.
Ainsi, en utilisant JOIN FETCH, l'opération sera exécutée et les données liées seront chargées immédiatement, malgré le chargement lazy défini dans le mapping.
Exemple:
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();
// Les enfants seront chargés immédiatement, même si dans Parent.children est défini FetchType.LAZY