Merhaba arkadaşlar, bu yazımda sizlere hibernate de ilişki çeşitlerinden bahsedeceğim. Cascade nedir? Çeşitleri nelerdir? Ve fetch tipleri ile ilgili Sorulara cevap vereceğim.
Cascade nedir?
Cascade, bir JPA standardıdır. Entity sınıflarımızdaki ilişkilerin hareketlerini yani davranışlarını cascade tipleri ile ayarlarız. Yani ilişkili sınıfların birbirlerinden etkilenip etkilenmemesini sağlıyor. Örnek olarak bir değer sildiğimizde o silinen veri ilişkili olan verilerin etkilenmesini ya da etkilenmemesini sağlarız. Bu JPA standartı, veritabanımıza bulaşmadan kolaylıkla Java sınıflarımız üzerinden işlemleri yönetmemizi sağlar.
Cascade tipleri nelerdir?
TİP | Görevi |
Persist | Nesne persist edilirse ilişkili nesnelerde persist edilir |
All | Tüm işlemleri ilişkili nesnelerle birlikte yapar |
Merge | Nesne merge edilirse ilişkili nesnelerde merge edilir |
Remove | Nesne remove edilirse ilişkili nesnelerde remove edilir |
Refresh | Nesne refresh edilirse ilişkili nesnelerde refresh edilir |
Nullable => False değerini alırsa o sütun null olamaz(Not Null).
Fetch Type Nedir?
Aralarında ilişki bulunan Entity sınıflarından bir tarafın yüklenme durumunda diğer tarafın yüklenme stratejisini belirlememizi sağlar. Hibernate de 2 adet fetch type vardır. Bunlar:
1-)Eager(Ön Yükleme)
2-)Lazy(Tembel/Sonradan Yükleme)
Eğer @OneToOne ve @ManyToOne ilişkileri kullanıyorsak FetchType olarak Eager kullanmamız daha doğru olur. Yani bir tane Entity nesnesi üzerinden ilişki kurulduğundan ön yükleme yapmak performans açısından sorun oluşturmaz.
Eğer ki @OneToMany ve @ManyToMany ilişki kullanıyorsak FetchType olarak Lazy kullanmamız daha doğru olur. Yani birden fazla ilişkili nesne olduğundan ön yükleme yapmamız performans açısından kayba neden olur. Bunun için ihtiyaç duyulduğunda yüklemek daha doğru olur.
bir soru soracaktım. Cascade belirtilmezse varsayılan olarak hangi işlemleri gerçekleştirir(Persist,All, Merge, Remove, Refresh ? )
JPA da Cascade default olarak yoktur.(By default no operations are cascaded.)