Sobes.tech
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