Sobes.tech
Middle

Vai tiks veikt JOIN FETCH operācija, izmantojot lēno ielādi?

sobes.tech AI

Atbilde no AI

Darbība JOIN FETCH JPA tiek izmantota, lai uzreiz ielādētu saistītās entītijas, tas ir, tā uzreiz ielādē saistītos objektus kopā ar galveno vaicājumu. Anotācija vai konfigurācija par slinku ielādi (FetchType.LAZY) norāda, ka saistītie dati jāielādē tikai pēc pieprasījuma.

Ja vaicājumā tiek izmantots JOIN FETCH, saistītās entītijas tiks ielādētas uzreiz, neatkarīgi no tā, kas norādīts slinkās ielādes anotācijā. Citiem vārdiem sakot, JOIN FETCH pārdefinē ielādes stratēģiju un piespiež uzreiz ielādēt.

Tādējādi, izmantojot JOIN FETCH, operācija tiks izpildīta un saistītie dati tiks ielādēti uzreiz, neskatoties uz mapping noteikto lazy ielādi.

Piemērs:

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();
// Bērni tiks ielādēti uzreiz, pat ja Parent.children ir iestatīts uz FetchType.LAZY