Sobes.tech
Middle

Θα πραγματοποιηθεί η λειτουργία JOIN FETCH κατά τη χρήση της αργής φόρτωσης;

sobes.tech AI

Απάντηση από AI

Η λειτουργία JOIN FETCH στο JPA χρησιμοποιείται για την άμεση φόρτωση των σχετιζόμενων οντοτήτων, δηλαδή φορτώνει τα σχετιζόμενα αντικείμενα άμεσα μαζί με το κύριο ερώτημα. Η σημείωση ή η ρύθμιση της τεμπέλικης φόρτωσης (FetchType.LAZY) δείχνει ότι τα σχετιζόμενα δεδομένα πρέπει να φορτώνονται μόνο κατόπιν ζήτησης.

Αν στο ερώτημα χρησιμοποιείται JOIN FETCH, οι σχετιζόμενες οντότητες θα φορτωθούν άμεσα, ανεξάρτητα από το τι δηλώνεται στη σημείωση της τεμπέλικης φόρτωσης. Με άλλα λόγια, το JOIN FETCH υπερκαλύπτει τη στρατηγική φόρτωσης και επιβάλλει την άμεση φόρτωση.

Έτσι, κατά τη χρήση του JOIN FETCH, η λειτουργία θα εκτελεστεί και τα σχετιζόμενα δεδομένα θα φορτωθούν άμεσα, παρά την τεμπέλικη φόρτωση που έχει οριστεί στο mapping.

Παράδειγμα:

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();
// Τα παιδιά θα φορτωθούν άμεσα, ακόμη και αν στο Parent.children έχει οριστεί FetchType.LAZY