15 Aralık 2020 Salı

JPA JPQL Join Çeşitleri

Giriş
- JOIN - INNER JOIN ile aynı. Kesişimi verir
- LEFT JOIN - LEFT OUTER JOIN ile aynı
- RIGHT JOIN
- CROSS JOIN
- FETCH - JPA'ya mahsus


1. JOIN
JPQL JOIN yazısına taşıdım. Sadece randevusu olan doktorları yükler. Eğer ilişki LAZY ise child nesnenin tamamını yüklemez.  N+1 Select Problemine sebep olur

2. LEFT JOIN
Randevusu olan veya olmayan tüm doktorları yükler.  Eğer ilişki LAZY ise child nesnenin tamamını yüklemez.  N+1 Select Problemine sebep olur

3. RIGHT JOIN
Örnek ver

4. CROSS JOIN
Bir örnek burada

5. FETCH
FETCH hem JOIN hem de LEFT JOIN ile birlikte kullanılabilir. 

Yani 
- JOIN FETCH veya
- LEFT JOIN FETCH 
şeklinde kullanabiliriz.

- Eğer ilişki LAZY ise child nesnenin tamamıyla yüklenmesini sağlar. Yani ilişkiyi EAGER haline getirir. İlişkinin EAGER hale gelmesi kendi içinde de "Cartesian Product Problem" ine sebep oluyor. Onu da aşağıda yazdım.

Yani ilişkinin şöyle olması gerekir. Burada LAZY sadece daha rahat anlaşılsın diye yazılı. Yoksa @OneToMany'nin varsayılan davranışı zaten böyle
@OneToMany(fetch = FetchType.LAZY)
private Set<Department> department;

5.1 JOIN FETCH - Inner Join Gibi
JOIN FETCH yazısına taşıdım

5.2 LEFT JOIN FETCH - Left Outer Join Gibi
LEFT JOIN FETCH yazısına taşıdım

Hiç yorum yok:

Yorum Gönder