Sobes.tech
Middle

Tembel yükleme kullanılırken JOIN FETCH işlemi gerçekleştirilecek mi?

sobes.tech yapay zeka

AI'dan gelen yanıt

JPA'da JOIN FETCH işlemi, ilişkili varlıkların tembel yüklenmesini (lazy loading) zorunlu kılmak yerine, ilişkili nesneleri hemen yüklemek için kullanılır. Bu, ana sorguyla birlikte ilişkili nesnelerin de hemen yüklendiği anlamına gelir. Tembel yükleme (FetchType.LAZY) ise, ilişkili verilerin yalnızca talep edildiğinde yüklenmesini belirtir.

Eğer sorguda JOIN FETCH kullanılırsa, ilişkili varlıklar, lazy yükleme anotasyonunda ne belirtilmiş olursa olsun, hemen yüklenir. Bu, JOIN FETCH'in yükleme stratejisini geçersiz kıldığı ve zorunlu olarak hemen yüklemeyi sağladığı anlamına gelir.

Bu nedenle, JOIN FETCH kullanıldığında, işlem gerçekleştirilir ve ilişkili veriler hemen yüklenir, mapping'te tanımlanan lazy yükleme dikkate alınmaz.

Örnek:

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();
// Çocuklar hemen yüklenir, hatta Parent.children'da FetchType.LAZY belirlenmiş olsa bile