25 Haziran 2016 Cumartesi

Hibernate Kalıtım (Inheritance) strategy=TABLE_PER_CLASS



@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

Bu anotasyon kaç tane Entity sınıfınız var ise o kadar tablo oluşturur. Her Entity sınıfı kalıtım aldığı sınıfa ait değişkenleri de tablosunda barındırı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.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.TABLE_PER_CLASS)
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:28:30 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: hibernate_sequences
Haz 21, 2016 3:28:30 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 Hayvan (ad, solonumTuru, omur, yasamAlani, id) values (?, ?, ?, ?, ?)
Hibernate: insert into Surungen (ad, solonumTuru, omur, yasamAlani, zehirMiktari, id) values (?, ?, ?, ?, ?, ?)
Canli, Hayvan ve Surungen adında üç tablo oluştu.


8-Veritabanı Tabloları




Canli tablosuna ait iki kolon bulunmaktadır.




Hayvan tablosu normalde omur ve yasamAlani kolonlarına sahipti. Canli sınıfını kalıtım aldığı için ad ve solunumTuru kolonlarına da sahip olmuştur.



Surungen tablosu Hayvan sınıfını kalıtım almıştır. Hayvan sınıfı ise Canli sınıfını kalıtım almıştır. Bu sebepten Surungen tablosunda hem Canli hem de Hayvan sınıfına ait kolonlar mevcuttur.

Hiç yorum yok:

Yorum Gönder