25 Haziran 2016 Cumartesi

Hibernate One-to-Many Relationship (XML Haritalama) Örneği


@OneToMany

Birden çoğa ilişki için kullanılır. Örnek üzerinden işleyelim.




Öğrencilerin ve sınıfların olduğu bir okulu düşünelim. Bir öğrenci sadece bir sınıfa kayıt yaptırabilir. Aynı anda iki sınıfta bulunamaz. Fakat aynı sınıfta birden fazla öğrenci bulunabilir.


0-Kullanılan Teknolojiler

Eclipse IDE
Maven 3.3.9
Hibernate 4.0.1.Final
MySQL 5.1


1-İlişki Tablosu



One-to-Many ilişkiye sahiptir. ogrenci tablosuna sinif tablosuna ait SINIF_ID kolonu biz eklemediğimiz halde otomatik olarak eklenmiştir. Bunun sebebi one-to-many ilişkisidir.


2-Proje





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

Ogrenci.java

package com.hasanburakavci.model;

import java.io.Serializable;

public class Ogrenci implements Serializable{

        private static final long serialVersionUID = 1L;

        private int id;
        private String ad;
        private String soyad;
        private Sinif sinif;
  
        //Yapılandırıcı
        public Ogrenci() {
   
        }
 
        //------Setter-Getter------ 
  
}





Sinif.java

package com.hasanburakavci.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;


public class Sinif implements Serializable{

        private static final long serialVersionUID = 1L;
  
        private int id;
        private String ad;
        private String ogretmen;
        private Set<Ogrenci> ogrenciler = new HashSet<Ogrenci>();
  
        //---------Yapılandırıcı-------------
        public Sinif() {
   
        }
  
        //----------Setter-Getter-------------
  
}




4-XML Haritalama Dosyaları

Ogrenci.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.Ogrenci" table="ogrenci">
                <id name="id" type="java.lang.Integer">
                        <column name="OGRENCI_ID" />
                        <generator class="identity" />
                </id>
                <property name="ad" type="string">
                        <column name="AD" />
                </property>
                <property name="soyad" type="string">
                        <column name="SOYAD" />
                </property>     
                <many-to-one name="sinif" class="com.hasanburakavci.model.Sinif" fetch="select">
                        <column name="SINIF_ID" />
                </many-to-one>
        </class>
</hibernate-mapping>



Sinif.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.Sinif" table="sinif">   <id name="id" type="java.lang.Integer">    <column name="SINIF_ID"/>    <generator class="identity"/>   </id>   <property name="ad" type="string">    <column name="AD"/>   </property>   <property name="ogretmen" type="string">    <column name="OGRETMEN"/>   </property>  
<set  name="ogrenciler" table="ogrenci" fetch="select" > <key> <column name="SINIF_ID" /> </key> <one-to-many class="com.hasanburakavci.model.Ogrenci"/> </set> </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.Ogrenci;
import com.hasanburakavci.model.Sinif;
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();
               //ogrenci1 oluşturuldu.
               Ogrenci ogrenci1= new Ogrenci();
               ogrenci1.setAd("ogrenci1");
               ogrenci1.setSoyad("ogrenci1");
              
               //ogrenci2 oluşturuldu.
               Ogrenci ogrenci2= new Ogrenci();
               ogrenci2.setAd("ogrenci2");
               ogrenci2.setSoyad("ogrenci2");
               
               //ogrenci3 oluşturuldu.
               Ogrenci ogrenci3= new Ogrenci();
               ogrenci3.setAd("ogrenci3");
               ogrenci3.setSoyad("ogrenci3");
               
               //sinif1 oluşturuldu.
               Sinif sinif1= new Sinif();
               sinif1.setAd("sinif1");
               sinif1.setOgretmen("ogretmen1");
               
               //sinif2 oluşturuldu
               Sinif sinif2= new Sinif();
               sinif2.setAd("sinif2");
               sinif2.setOgretmen("ogretmen2");
               
               //sinif nesnelerine ogrenciler eklendi.
               sinif1.getOgrenciler().add(ogrenci1);
               sinif1.getOgrenciler().add(ogrenci3);
               sinif2.getOgrenciler().add(ogrenci2);
               
               //ogrenci nesnelerine sinif eklendi.
               ogrenci1.setSinif(sinif1);
               ogrenci2.setSinif(sinif2);
               ogrenci3.setSinif(sinif1);
               
               //siniflar veritabanına kaydediliyor.
               session.save(sinif1);
               session.save(sinif2);

               //ogrenciler veritabanına kaydediliyor.
               session.save(ogrenci1);
               session.save(ogrenci2);
               session.save(ogrenci3);
               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="Ogrenci.hbm.xml"/>
        <mapping  resource="Sinif.hbm.xml"/></session-factory>
</hibernate-configuration>



9-Konsol

.
.
.
INFO: HHH000262: Table not found: ogrenci
Haz 19, 2016 1:55:56 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: sinif
Haz 19, 2016 1:55:56 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: ogrenci
Haz 19, 2016 1:55:56 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: sinif
Haz 19, 2016 1:55:56 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: insert into sinif (AD, OGRETMEN) values (?, ?)
Hibernate: insert into sinif (AD, OGRETMEN) values (?, ?)
Hibernate: insert into ogrenci (AD, SOYAD, SINIF_ID) values (?, ?, ?)
Hibernate: insert into ogrenci (AD, SOYAD, SINIF_ID) values (?, ?, ?)
Hibernate: insert into ogrenci (AD, SOYAD, SINIF_ID) values (?, ?, ?)
ogrenci, sinif adında iki tablo ve bu tabloya eklenen veriler veritabanına kaydedildi.


10-Veritabanı Tabloları


ogrenci tablosunda AD ve SOYAD alanlarına ek olarak SINIF_ID adında kolon gelmiştir. Bu bize sinif tablosu hakkında bilgi vermektedir. Çünkü hakim taraftır.






sinif tablosuna AD ve OGRETMEN kolonları eklendi. ogrenci tablosuna ait bir bilgi bulunmamaktadır.

Hiç yorum yok:

Yorum Gönder