Wordt de JOIN FETCH-operatie uitgevoerd bij gebruik van lazy loading?
sobes.tech AI
Antwoord van AI
De operatie JOIN FETCH in JPA wordt gebruikt om gerelateerde entiteiten eager te laden, dat wil zeggen dat het gerelateerde object direct samen met de hoofdquery wordt geladen. De annotatie of configuratie van lazy loading (FetchType.LAZY) geeft aan dat de gerelateerde gegevens alleen op aanvraag moeten worden geladen.
Als in de query JOIN FETCH wordt gebruikt, worden de gerelateerde entiteiten onmiddellijk geladen, ongeacht wat er in de lazy loading-annotatie is aangegeven. Met andere woorden, JOIN FETCH overschrijft de laadstrategie en dwingt eager laden af.
Dus, bij gebruik van JOIN FETCH, wordt de operatie uitgevoerd en worden de gerelateerde gegevens onmiddellijk geladen, ondanks de lazy loading die in de mapping is ingesteld.
Voorbeeld:
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();
// Kinderen worden onmiddellijk geladen, zelfs als in Parent.children FetchType.LAZY is ingesteld