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