Middle
Bude operace JOIN FETCH provedena při použití lazy loadingu?
sobes.tech AI
Odpověď od AI
Operace JOIN FETCH v JPA se používá k eager načítání souvisejících entit, tj. načítá připojené objekty ihned spolu s hlavním dotazem. Anotace nebo konfigurace lazy načítání (FetchType.LAZY) označuje, že související data by měla být načítána pouze na požádání.
Pokud je v dotazu použito JOIN FETCH, budou související entity načteny okamžitě, bez ohledu na to, co je uvedeno v anotaci lazy načítání. Jinými slovy, JOIN FETCH přepisuje strategii načítání a vynucuje eager načítání.
Tím pádem, při použití JOIN FETCH bude operace provedena a související data načtena okamžitě, i přes lazy načítání nastavené v mapování.
Příklad:
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();
// Děti budou načteny okamžitě, i když v Parent.children je nastaven FetchType.LAZY