Sobes.tech
Middle

Lazımlik yuklashdan foydalanilganda JOIN FETCH operatsiyasi bajariladimi?

sobes.tech AI

AIdan javob

JPA'da JOIN FETCH operatsiyasi bog'langan ob'ektlarni ochiq yuklash uchun ishlatiladi, ya'ni u asosiy so'rov bilan birga bog'langan obyektlarni darhol yuklaydi. Lazy yuklash (FetchType.LAZY) anotatsiyasi yoki sozlamasi bog'langan ma'lumotlar faqat talab qilinsa yuklanishini ko'rsatadi.

Agar so'rovda JOIN FETCH ishlatilsa, bog'langan ob'ektlar darhol yuklanadi, bu lazy yuklash anotatsiyasida nima yozilgan bo'lishidan qat'i nazar. Ya'ni, JOIN FETCH yuklash strategiyasini o'zgartiradi va majburiy ravishda eager yuklashni ta'minlaydi.

Shuning uchun, JOIN FETCH ishlatilganda, operatsiya bajariladi va bog'langan ma'lumotlar darhol yuklanadi, mappingda belgilangan lazy yuklashga qaramay.

Misol:

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();
// Bolalar darhol yuklanadi, hatto Parent.children da FetchType.LAZY belgilangan bo'lsa ham