Middle
Se va efectua operația JOIN FETCH atunci când se utilizează încărcarea întârziată?
sobes.tech AI
Răspuns de la AI
Operația JOIN FETCH în JPA este utilizată pentru încărcarea eager a entităților legate, adică încarcă obiectele legate imediat împreună cu interogarea principală. Anotarea sau configurarea încărcării lazy (FetchType.LAZY) indică faptul că datele legate trebuie încărcate doar la cerere.
Dacă în interogare se folosește JOIN FETCH, entitățile legate vor fi încărcate imediat, indiferent de ceea ce indică adnotarea de încărcare lazy. Cu alte cuvinte, JOIN FETCH suprascrie strategia de încărcare și forțează încărcarea eager.
Astfel, utilizând JOIN FETCH, operația va fi executată și datele legate vor fi încărcate imediat, în ciuda încărcării lazy stabilite în mapping.
Exemplu:
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();
// Copiii vor fi încărcați imediat, chiar dacă în Parent.children este setat FetchType.LAZY