Sobes.tech
Middle

Bude operácia JOIN FETCH vykonaná pri použití lazy loadingu?

sobes.tech AI

Odpoveď od AI

Operácia JOIN FETCH v JPA sa používa na eager načítanie súvisiacich entít, teda načítava pripojené objekty okamžite spolu s hlavným dopytom. Anotácia alebo konfigurácia lazy načítania (FetchType.LAZY) naznačuje, že súvisiace údaje by mali byť načítané iba na požiadanie.

Ak sa v dopyte použije JOIN FETCH, súvisiace entity budú načítané okamžite, bez ohľadu na to, čo je uvedené v anotácii lazy načítania. Inými slovami, JOIN FETCH prepíše stratégiu načítania a vynúti eager načítanie.

Týmto spôsobom, pri použití JOIN FETCH, bude operácia vykonaná a súvisiace údaje budú načítané okamžite, aj napriek lazy načítaniu nastavenému v mapovaní.

Prí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();
// Deti budú načítané okamžite, aj keď v Parent.children je nastavené FetchType.LAZY