İçeriğe geç

Hibernate – @ManyToMany

@ManyToMany anotasyonu entity içinde entity kullanılıyor ve aralarında da çoka çok bir ilişki var ise kullanılır. Kitap ve Yazar diye iki nesnemizin olduğunu düşünelim. Bir kitabın birden fazla yazarı olabilir. Aynı şekilde yazar birden fazla kitap da yazmış olabilir.

Kitap tablosu içinde Yazar tablosuna join yapacağız. Aralarındaki ilişki çoka çok olduğuna göre, bu tabloların entitylerini yazarken, ManyToMany anotasyonu kullanılmalıdır.

4 farklı özellik sunar.

fetch, cascade, mappedBy ve target entity -Fethc ile sorgu çekildiğinde join yapılan kolonun da tamanınım getirilip getirilmemesi belirlenir. Default olarak eager gelir. Sürekli birlikte kullanılacak tablolar olmadığı sürece fetchtype lazy yapılmalıdır. –

cascade ile cascade tipini belirtiriz. 6 farklı cascade tipi vardır.

Bu tipler;

  • detach
  • merge
  • persist
  • reflesh
  • remove
  • all


CascadeType.REMOVE seçersek, bu nesne silindiğinde diğer nesne de silinir ya da CascadeType .MERGE seçersek merge edildiğinde diğer nesne de merge edilir. Tüm işlemlerin diğer nesnede de yapılması istenirse CascadeType.ALL seçilir ve silinirse silinir, kaydedilirse kaydedilir.

mappedBy çift yönlü ilişklilerde kullanılır. Kitap – Yazar örneğimizde Yazar nesnesinde Kitap ve Kitap nesnesinde de Yazar var. mappedBy kullanılırsa kullanıldığı entity deki alan için database de alan oluşmaz ama entity üzerinde bu alan tutulur. Verilen örnekte de görüleceği üzere, Yazar üzerinde kitaplar için mappedBy kullanılmış. Bu demek oluyor ki, database deki kişi tablosunda kişi ilişkisi olmayacak ama kişi entity sinde bu liste dolu gelecek.

targetEntity : İlgili joine ilişkin referans sınıfın belirtilmesine yarar. Normalde gerekmez çünkü referans sınıf zaten alanın tipinden, get metotdundan ya da collections ların generic tipinden alınabilir. Fakat bazı durumlarda bunların hiçbirine ulaşılamaz. Örneğin, kitap nesnesindeki yazar listesini

public list yazarListesi;

diye tanımlasaydık bu listenin generic olarak bile bir türü belirtmemiş olacaktık. Bu durumda target entity ile Yazar.class deriz ve belirtmiş oluruz.

Bu 4 özellik de OneToOne anotasyonunda vardı ve görüldüğü gibi kullanımı OneToOne anotasyonundaki özellikler ile aynı şekilde kullanılıyor.

Tarih:Hibernate

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir