Middle
Folyik-e a JOIN FETCH művelet a késleltetett betöltés használatakor?
sobes.tech MI
Válasz az MI-től
A JOIN FETCH művelet a JPA-ban az összefüggő entitások eager betöltésére szolgál, vagyis az összefüggő objektumokat azonnal betölti a fő lekérdezéssel együtt. A lazy betöltés (FetchType.LAZY) annotáció vagy konfiguráció azt jelzi, hogy az összefüggő adatok csak kérésre töltődjenek be.
Ha a lekérdezésben JOIN FETCH van használatban, akkor az összefüggő entitások azonnal betöltődnek, függetlenül attól, hogy mit írnak az lazy betöltés annotációban. Más szóval, a JOIN FETCH felülírja a betöltési stratégiát, és kötelezővé teszi az eager betöltést.
Ezért, a JOIN FETCH használatakor a művelet végrehajtódik, és az összefüggő adatok azonnal betöltődnek, a mappingben beállított lazy betöltés ellenére.
Példa:
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();
// A gyerekek azonnal betöltődnek, még akkor is, ha a Parent.children-ben FetchType.LAZY van beállítva