@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
Bu anotasyon adından da anlaşılacağı gibi kalıtımda tek bir tablonun kullanılacağını göstermektedir. (Single table -> Tek tablo) @Inheritance anotasyonunun varsayılan stratejisi SINGLE_TABLE'dır. Bu sebepten sadece @Inheritance yazılırsa değişen hiçbir şey olmaz.
@DiscriminatorColumn
Oluşacak bu tablonun DTYPE adında bir kolonu olacaktır. Varsayılan tipi ise VARCHAR'dır. Bu anotasyonu sayesinde hem kolonun ismini hem de tipini değiştirebiliriz.
@DiscriminatorColumn(name="canli",discriminatorType=DiscriminatorType.STRING) yazıldığı taktirde kolonun adı canli, tipi string olacaktır.
@DiscriminatorValue
Bu anotasyon kalıtım alınan diğer sınıflar için kullanılır. Oluşan yeni kolondaki kayıt isimlerini değiştirir. @DisciriminatorValue(name="surungen") denilirse kolona surungen yazılır.
0-Kullanılan Teknolojiler
Eclipse IDE
Maven 3.3.9
Hibernate 4.0.1.Final
MySQL 5.1
1-Proje
2-Entity (Model) Sınıfı
Canli.java
package com.hasanburakavci.model;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
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.SINGLE_TABLE)
@DiscriminatorColumn(name="canli",discriminatorType=DiscriminatorType.STRING)
//SINGLE_TABLE ile tek bir tablo oluşacak.
public class Canli {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
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;
import javax.persistence.DiscriminatorValue;
@Entity
@DiscriminatorValue(value="hayvan")
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;
import javax.persistence.DiscriminatorValue;
@Entity
@DiscriminatorValue(value="surungen")
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: HHH000396: Updating schema
Haz 21, 2016 10:28:41 AM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: Canli
Haz 21, 2016 10:28:41 AM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: Canli
Haz 21, 2016 10:28:41 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: insert into Canli (ad, solonumTuru, canli) values (?, ?, 'Canli')
Hibernate: insert into Canli (ad, solonumTuru, omur, yasamAlani, canli) values (?, ?, ?, ?, 'hayvan')
Hibernate: insert into Canli (ad, solonumTuru, omur, yasamAlani, zehirMiktari, canli) values (?, ?, ?, ?, ?, 'surungen')
Canli adında tablo oluştu. Diğer alanlar bu tablonun içerisine eklendi.
8-Veritabanı Tablosu
Tek bir tablo mevcut. Bütün değişkenler bu tabloya eklendi. canli adında bir kolon oluştu. Normalde DTYPE adında kolon olacaktı ama biz değiştirdik. Canli sınıfında 3 değişken tanımlandığı için sadece 2 kolonu mevcut. Hayvan sınıfında 2 değişken tanımlandı ancak Canlı sınıfına ait 2 değişkeni de kullanabildiği için toplam 5 kolonu sahip oldu. Surungen sınıfı hem Canlı hem de Hayvan sınıflarının değişkenlerini kullanabiliyor. Toplamda 6 kolonu var.
Devamını oku ...