@Inheritance(strategy=InheritanceType.JOINED)
Bu anotasyon kaç tane Entity sınıfınız var ise o kadar tablo oluşturur. Her Entity sadece kendi sınıfına ait değişkenleri barındırır. Yani PER_CLASS_TABLE ve SINGLE_TABLE stratejilerindeki gibi kalıtım aldığı değişkenleri barındırması gibi bir durum söz konusu değildir. Sadece id değerleri her tabloda bulunur. Bu id değerleri sayesinde eklenen veriler bulunabilir.
1-Proje

2-Entity (Model) Sınıfı
Canli.java
package com.hasanburakavci.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; @Entity @Inheritance(strategy=InheritanceType.JOINED) public class Canli { @Id @GeneratedValue(strategy=GenerationType.TABLE) private int id; private String ad; private String solonumTuru; //----Yapılandırıcı------ public Canli() { } //-------Setter-Getter------ }
Hayvan.java
package com.hasanburakavci.model; import javax.persistence.Entity; @Entity public class Hayvan extends Canli { private int omur; private String yasamAlani; //----Yapılandırıcı------ public Hayvan() { } //-------Setter-Getter------ }
Surungen.java
package com.hasanburakavci.model; import javax.persistence.Entity; @Entity public class Surungen extends Hayvan { private int zehirMiktari; //----Yapılandırıcı------ public Surungen() { } //-------Setter-Getter------ }
3-HibernateUtil Sınıfı
package com.hasanburakavci.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { //SessionFactory oluşturuluyor. private static SessionFactory sessionFactory; static{ Configuration configuration = new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); } //Diğer sınıflardan getSessionFactory metoduyla sessionFactory çağırılıyor. public static SessionFactory getSessionFactory() { return sessionFactory; } }
4-Hibernate Application Sınıfı
package com.hasanburakavci; import org.hibernate.Session; import com.hasanburakavci.model.Canli; import com.hasanburakavci.model.Hayvan; import com.hasanburakavci.model.Surungen; import com.hasanburakavci.util.HibernateUtil; public class HibernateApplication { public static void main(String[] args){ //HibernateUtil sınıfından SessionFactory çağrıllp Session oluşturuluyor. Session session= HibernateUtil.getSessionFactory().openSession(); //Canli nesnesi oluşturuluyor Canli canli= new Canli(); canli.setAd("Bakteri"); canli.setSolonumTuru("O2siz"); //Hayvan nesnesi oluşturuluyor. Hayvan hayvan=new Hayvan(); hayvan.setAd("Balik"); hayvan.setSolonumTuru("Solungac"); hayvan.setYasamAlani("Deniz"); hayvan.setOmur(5); //Sürüngen nesnesi oluşturuluyor. Surungen surungen = new Surungen(); surungen.setAd("Yilan"); surungen.setSolonumTuru("Akciger"); surungen.setYasamAlani("Kara"); surungen.setZehirMiktari(100); try{ session.beginTransaction(); session.save(canli); session.save(hayvan); session.save(surungen); session.getTransaction().commit(); } catch (Exception e) { /*Eğer hata meydana gelirse Transaction ile yapılan işlem geriye sarılıp iptal eiliyor*/ session.getTransaction().rollback(); }finally { //her durumda session işlemi sonlandırılıyor. session.close(); } } }
5-Pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hasanburakavci</groupId> <artifactId>MerhabaHibernate</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId><version>5.1.6</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.0.1.Final</version> </dependency> </dependencies> </project>
6-Hibernate.cfg.xml Dosyası
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password"></property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping class="com.hasanburakavci.model.Canli"/> <mapping class="com.hasanburakavci.model.Hayvan"/> <mapping class="com.hasanburakavci.model.Surungen"/> </session-factory> </hibernate-configuration>
7-Konsol
.
.
.
INFO: HHH000262: Table not found: Surungen
Haz 21, 2016 3:52:34 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: hibernate_sequences
Haz 21, 2016 3:52:34 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: select sequence_next_hi_value from hibernate_sequences where sequence_name = 'Canli' for update
Hibernate: insert into hibernate_sequences(sequence_name, sequence_next_hi_value) values('Canli', ?)
Hibernate: update hibernate_sequences set sequence_next_hi_value = ? where sequence_next_hi_value = ? and sequence_name = 'Canli'
Hibernate: insert into Canli (ad, solonumTuru, id) values (?, ?, ?)
Hibernate: insert into Canli (ad, solonumTuru, id) values (?, ?, ?)
Hibernate: insert into Hayvan (omur, yasamAlani, id) values (?, ?, ?)
Hibernate: insert into Canli (ad, solonumTuru, id) values (?, ?, ?)
Hibernate: insert into Hayvan (omur, yasamAlani, id) values (?, ?, ?)
Hibernate: insert into Surungen (zehirMiktari, id) values (?, ?)
Canli, Hayvan ve Surungen adında üç tablo oluştu.
8-Veritabanı Tabloları

Canli tablosunda ad ve solonumTuru kolonları mevcuttur. diğer stratejilerden farklı olarak kaydedilen tüm nesneler bu tabloda mevcuttur.

Hayvan tablosunda sadece omur ve yasamAlanlari kolonları mevcut. Kalıtım aldığı Canli sınıfından sadece id kolonu bu tabloda bulunmaktadır. Ayrıca Hayvan sınıfına ait nesne bu tabloya kaydedilmiş.

Surungen tablosunda sadece zehirMiktari kolonu mevcut. Kalıtım aldığı Hayvan sınıfından sadece id kolonu bu tabloda bulunmaktadır. Dikkat edilirse 3 nesne 3 tabloyada kaydedilmiş. Bu nesneleri id değerleriyle ayırt edebiliyoruz.
Hiç yorum yok:
Yorum Gönder