25 Haziran 2016 Cumartesi

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


@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.

1 yorum:

  1. RTP in slot machines - Poker News Guides
    The RTP of a 카지노검증 slot machine e스포츠 varies with the 윌리엄 힐 most popular and most popular slot games. The highest RTPs come from 룰렛 테이블 the RTP 헐리우드 노출 of many

    YanıtlaSil