Entity inheritance in JPA

0 3,245

Merhaba Arkadaşlar,

Jpa java standartı olduğu için nesne’ye yönelimli tüm kavramları destekler. Bugüne kadar bir entity bir tablo’ya karşılık geldiği şekilde geliştirme yapardık.Şimdi ise biraz daha ileri seviye ilişkiler ele alacağız . Java Persistence API de kalıtımı inceliyeceğiz . 3 tür kalıtım stratejisi vardır bunlar :

 –  JOINED ,
–  SINGLE_TABLE ,
–  TABLE_PER_CLASS

Şimdi bu stratejilerin hepsini kullanıp veritabanında nasıl çıktısı var görelim . Kurgumuz şöyle olsun bir Araç sınıfımız olsun ve Binek ve ticari araç olarak iki tip araç olsun , sonrasındada alt sınıflarda Otomobil , Kayonet ve Bisiklet sınıfımız farklı araç tipindeki sınıflarımızı miras alsın.

 

 

İlk önce abstract sınıf olan Araç sınıfımızı yazalım .

Arac.java

 

 

Şimdi ise araç tiplerimiz olan BinekArac ve TicariArac sınıflarımızı yazıyoruz Arac sınıfından miraz alarak,

BinekArac.java

 

 

TicariArac.java

 

@MappedSuperClass notasyonuna biraz değinecek olrusak bu notasyonun kullanıldığı sınıflar entitiy olarak sayılmazlar , veritabanında tablo olarak karşılıkları olmaz doğal olarakta sorgu yazılmaz.
Şimdi ise Otomobil , Kamyonet ve Bisiklet sınıflarımızı yazalım ,

Otomobil.java

 

 

Kamyonet.java

 

 

Bisiklet.java

 

 

Database ile bağlantımızı kuralım Persistence.xml dosyamızı oluşturalım.

Persistence.xml

 

Test etmemiz için bir sınıf yazalım ve çalıştıralım.

TestProject.java

 

 

Şimdi normalde bu şekilde 4 tane tablomuz olması lazım doğal olarak Arac , Otomobil ,Bisiklet ve Kamyonet isminde ama burada jpa kalıtım kullandığımız için tek tablo oluşacaktır.

 

Stratejimiz  InheritanceType.SINGLE_TABLE  olduğundan çıktısı şu şekilde olacaktır :

 

InheritanceType.JOINED :

 

 

InheritanceType.TABLE_PER_CLASS :

 

 

Umarım yararlı olmuştur ?

İyi Çalışmalar

Email adresiniz yayınlanmayacaktır.