Sobes.tech
Middle

Կատարվելու է արդյոք JOIN FETCH գործողությունը երբ օգտագործվում է դանդաղ բեռնումը:

sobes.tech AI

Պատասխան AI-ից

JPA-ում JOIN FETCH գործառույթը օգտագործվում է կապված օբյեկտների անհապաղ բեռնելու համար, այսինքն՝ այն բեռնում է կապված օբյեկտները անմիջապես հիմնական հարցումի հետ։ Տեգավորումը կամ լենիվ բեռնումը (FetchType.LAZY) ցույց է տալիս, որ կապված տվյալները պետք է բեռնվեն միայն պահանջի դեպքում։

Եթե հարցումում օգտագործվում է JOIN FETCH, կապված օբյեկտները անմիջապես բեռնվում են, անկախ այն բանից, թե ինչ է նշված լենիվ բեռնումը։ Այլ կերպ ասած, JOIN FETCH փոխում է բեռնումի ռազմավարությունը և պարտադրում է անհապաղ բեռնում։

Այսպիսով, JOIN FETCH օգտագործելիս, գործողությունը կիրականացվի և կապված տվյալները անմիջապես բեռնվեն, չնայած մապինգում սահմանված լենիվ բեռնումին։

Օրինակ՝

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