Middle
Ar bus vykdoma JOIN FETCH operacija naudojant tingų įkėlimą?
sobes.tech AI
Atsakymas iš AI
JPA JOIN FETCH operacija naudojama susijusioms entitetėms įkelti iš anksto, tai yra ji iš karto įkelia susijusius objektus kartu su pagrindiniu užklausa. Anotacija arba konfigūracija dėl tinginio įkėlimo (FetchType.LAZY) nurodo, kad susiję duomenys turėtų būti įkelti tik pagal poreikį.
Jei užklausoje naudojamas JOIN FETCH, susijusios entitetės bus įkelti iš karto, nepriklausomai nuo to, kas nurodyta tinginio įkėlimo anotacijoje. Kitaip tariant, JOIN FETCH perrašo įkėlimo strategiją ir priverčia įkelti iš anksto.
Taigi, naudojant JOIN FETCH, operacija bus vykdoma ir susiję duomenys bus įkelti iš karto, nepaisant mappinge nustatyto lazy įkėlimo.
Pavyzdys:
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();
// Vaikai bus įkelti iš karto, net jei Parent.children nustatyta `FetchType.LAZY`