Java Persistence API – Cascade Stratejileri

Cascade JPA içerisinde stratejileri objeler arasındaki persist operasyonların birlikte davranışlarını belirler. Bunun anlamı bağlı olduğunuz nesnenin aynı persist operasyonundan geçip geçmemesidir.     Buna göre Customer ve CustomerDetail arasında OneToOne […]

Cascade JPA içerisinde stratejileri objeler arasındaki persist operasyonların birlikte davranışlarını belirler. Bunun anlamı bağlı olduğunuz nesnenin aynı persist operasyonundan geçip geçmemesidir.

 

cascadecopy

 

Buna göre Customer ve CustomerDetail arasında OneToOne bir ilişki bulunmaktadır ve kod aşağıdaki gibidir.

 Customer.java

CustomerDetail.java

 

Şimdi varsayalımki Persistence unitimizi ayarladık ve bi insert işlemi yapalım bu entity’ler üzerinden,

Bu durumda bir hata oluşacaktır.Bunun nedeni Customer içerisinde bulunan citizienNumber’in customer  ile birlikte kaydedilmesi ancak detail’in kayıtlı bir nesne olmamasıdır. Yani buradaki nesne managed değil transient durumda beklemektedir.

Bu çözmek için iki yöntemimiz bulunuyor. Birincisi aşağıdaki gibi Customer entity sini kaydetmeden önce CustomerDetaili’i kaydetmektir.

 

Böyle bir çözüm vardır ama birden fazla ilişkili nesnesi olan entitylerde karmaşıklığa neden olabilir bu durum.Onun için bu sorunu Cascade stratejilerini kullanarak  düzeltebiliriz.

Örneğimizde  Customer -> CustomerDetail ilişkisinde PERSIST tipinde bir cascade stratejisi verilmektedir.

 

Bu durumda : Customer tipindeki entity nesnelerinde bir insert işlemi gerçekleşirse CustomerDetail içinde aynı işlem gerçekleşecektir . Yani entityManager.persist(customer ) dediğimiz anda iki adet insert cümleciği olacaktır.

Bunun haricinde Cascade tipleri persist, merge, remove, refresh ve all şeklinde de verilmektedir.

Tip Tanım
PERSIST Nesne persist edilirse alt nesne de persist edilir
MERGE Nesne merge edilirse alt nesne de merge edilir
REMOVE Nesne silinirse bağlı alt nesne de silinir
REFRESH Nesne yenilenirse bağlı alt nesne de yenilenir
ALL Tüm işlemler birlikte yapılır

 

Umarım yararlı olmuştur.
İyi Çalışmalar 🙂

 

About Mehmet KILIÇ

Bilgisayar Mühendisi