@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 IDEMaven 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 (?, ?, ?)
Hiç yorum yok:
Yorum Gönder