25 Haziran 2016 Cumartesi

Hibernate One-To-One (XML Haritalama) Örneği


@OneToOne


Bire bir ilişki için kullanılır. Örnek üzerinden işleyelim.


Bir tiyatro salonunda kişilerin sadece bir bilet alma hakkı vardır. Çünkü bir kişi bir koltuğa oturabilir. Birden fazla koltuğa oturması mümkün değildir. Aynı zamanda bir koltuğa sadece bir kişi oturur. Yani bir kişi bir koltuğa sahip olur. Bir koltuk bir kişi tarafından kullanılır.

0-Kullanılan Teknolojiler

Eclipse IDE
Maven 3.3.9
Hibernate 4.0.1.Final
MySQL 5.1


1-İlişki Tablosu




One-to-One ilişkiye sahiptir. personeldetay ve personel tablosunda ortak olarak PERSONEL_ID kolonu bulunmaktadır.


2-Proje





3-Entity (Model) Sınıfları

Personel.java

package com.hasanburakavci.model;

import java.io.Serializable;

public class Personel implements Serializable{

        private static final long serialVersionUID = 1L;
 
        private int id;
        private String ad;
        private String soyad;
        private PersonelDetay personelDetay;
 
        //---------Yapılandırıcı-----------
        public Personel() {
   
       }
 
        //-------PersonelDetay-Set-Get-Metodu-------
        public PersonelDetay getPersonelDetay() {
                return personelDetay;
        }
        public void setPersonelDetay(PersonelDetay personelDetay) {
               this.personelDetay = personelDetay;
        }
 
        //---------Setter-Getter---------
        
  
}




PersonelDetay.java

package com.hasanburakavci.model;

import java.io.Serializable;

public class PersonelDetay implements Serializable{

        private static final long serialVersionUID = 1L;
 
        private int id;
        private String adres;
        private long telefonNumarasi;
        private Personel personel;
 
        //---------Yapılandırıcı-------------
        public PersonelDetay() {

        }
 
        //----------Setter-Getter-------------
       
  
}


4-XML Haritalama Dosyaları



Personel.hbm.xml Dosyası


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 <class name="com.hasanburakavci.model.Personel" table="personel">
  <id name="id" type="java.lang.Integer">
   <column name="PERSONEL_ID" />
   <generator class="identity" />
  </id>
  <property name="ad" type="string">
   <column name="AD" />
  </property>
  <property name="soyad" type="string">
   <column name="SOYAD" />
  </property>
  <one-to-one cascade="save-update"
   class="com.hasanburakavci.model.PersonelDetay" name="personelDetay" />
 </class>
</hibernate-mapping>



PersonelDetay.hbm.xml Dosyası


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.hasanburakavci.model.PersonelDetay" table="personeldetay">
  <id name="id" type="java.lang.Integer">
   <column name="PERSONEL_ID" />
   <generator class="foreign">
    <param name="property">personel</param>
   </generator>
  </id>
  <property name="adres" type="string">
   <column name="ADRES" />
  </property>
  <property  name="telefonNumarasi"
   type="long">
   <column name="TELEFON_NUMARASI" />
  </property>
  <one-to-one constrained="true" class="com.hasanburakavci.model.Personel"
   name="personel" />
 </class>
</hibernate-mapping>



5-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;
    }
}


6-Hibernate Application Sınıfı

package com.hasanburakavci;

import org.hibernate.Session;

import com.hasanburakavci.model.Personel;
import com.hasanburakavci.model.PersonelDetay;
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();
          
            try {
                  session.beginTransaction();

                  //personelDetay nesnesi oluşturuluyor.
                  PersonelDetay personelDetay= new PersonelDetay();
                  personelDetay.setAdres("adres1");
                  personelDetay.setTelefonNumarasi(12345);
                  //personel nesnesi oluşturuluyor.
                  Personel personel= new Personel();
                  personel.setAd("Hasan Burak");
                  personel.setSoyad("Avci");

                  //personel sınıfına personeldetay nesnesi ekleniyor.
                  personel.setPersonelDetay(personelDetay);

                  //personelDetay sınıfına personel nesnesi eleniyor.
                  personelDetay.setPersonel(personel);
                    
                  session.save(personel);
                  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();
            }
  
      }
}

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


8.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 resource="Personel.hbm.xml"/>
        <mapping resource="PersonelDetay.hbm.xml"/>
</session-factory>
</hibernate-configuration>
XML haritalama yapılırken <mapping resource=""/> kullanılır. Adres olarak ......hbm.xml dosyalarının adresi verilir.


9-Konsol

.
.
.
INFO: HHH000262: Table not found: personeldetay
Haz 18, 2016 5:03:39 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: personel
Haz 18, 2016 5:03:39 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: personeldetay
Haz 18, 2016 5:03:39 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: insert into personel (AD, SOYAD) values (?, ?)
Hibernate: insert into personeldetay (ADRES, TELEFON_NUMARASI, PERSONEL_ID) values (?, ?, ?)
personel ve personeldetay adında iki tablo veritabanına eklendi.


10-Veritabanı Tabloları




personel tablosuna ait ad ve soyad kolonlar oluştu. Personel sınıfı hakim olmayan taraf olduğu için PersonelDetay sınıfın ait bilgi bulundurmamaktadır.





personeldetay tablosuna ait adres telefon numarası kolonları oluştu. PersonelDetay sınıfında Personel sınıfına ait personel_ID kolonu bulunmaktadır.

Hiç yorum yok:

Yorum Gönder