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