@ManyToMany
Çoktan çoğa ilişki için kullanılır. Örnek üzerinden işleyelim.
Öğrencilerin ve derslerin olduğu bir okulu düşünelim. Hem bir öğrenci birden fazla derse kayıt yaptırabilir hem de bir ders birden fazla öğrenci tarafından alınabilir. Fatma fizik ve türkçe derslerini almış Türkçe dersi ise Ece ve Fatma tarafından alınmış.
0-Kullanılan Teknolojiler
Eclipse IDEMaven 3.3.9
Hibernate 4.0.1.Final
MySQL 5.1
1-İlişki Tablosu

Many-to-Many ilişkiye sahiptir. Hem ders hemde ogrencinin id değerine sahip yeni bir tablo oluştu.
2-Proje

3-Entity (Model) Sınıfları
Ogrenci.java
package com.hasanburakavci.model; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Ogrenci implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String ad; private String soyad; private Set<Ders>dersler= new HashSet<Ders> (0); //Yapılandırıcı public Ogrenci() { } //------Setter-Getter------ }
Ders.java
package com.hasanburakavci.model; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Ders implements Serializable { private static final long serialVersionUID = 1L; private int id; private String ad; private String ogretmen; private Set<Ogrenci>ogrenciler = new HashSet<Ogrenci> (0); // ---------Yapılandırıcı------------- public Ders() { } // ----------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> <set cascade="all" fetch="select" inverse="false" name="dersler" table="ogrenci_ders"> <key> <column name="OGRENCI_ID" /> </key> <many-to-many class="com.hasanburakavci.model.Ders"> <column name="DERS_ID" /> </many-to-many> </set> </class> </hibernate-mapping>
Ders.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.Ders" table="ders"> <id name="id" type="java.lang.Integer"> <column name="DERS_ID"/> <generator class="identity"/> </id> <property name="ad" type="string"> <column name="AD"/> </property> <property name="ogretmen" type="string"> <column name="OGRETMEN"/> </property> <set fetch="select" inverse="true"
name="ogrenciler" table="ogrenci_ders"> <key> <column name="DERS_ID"/> </key> <many-to-many class="com.hasanburakavci.model.Ogrenci">
<column name="OGRENCI_ID"/> </many-to-many> </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.Ders; 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("Ece"); ogrenci1.setSoyad("Ece"); //ogrenci2 oluşturuldu. Ogrenci ogrenci2= new Ogrenci(); ogrenci2.setAd("Fatma"); ogrenci2.setSoyad("Fatma"); //ders1 oluşturuldu. Ders ders1= new Ders(); ders1.setAd("Türkçe"); ders1.setOgretmen("Duygu"); //ders2 oluşturuldu Ders ders2= new Ders(); ders2.setAd("Fizik"); ders2.setOgretmen("Ali"); //ders nesnelerine öğrenciler eklendi. ders1.getOgrenciler().add(ogrenci1); ders1.getOgrenciler().add(ogrenci2); ders2.getOgrenciler().add(ogrenci2); //ogrenci nesnelerine dersler eklendi. ogrenci1.getDersler().add(ders1); ogrenci2.getDersler().add(ders1); ogrenci2.getDersler().add(ders2); /*Sadece ogrenci kaydediliyor. Sebebi Ogrenci.hbm.xml dosyasındaki cascade=all olmasıdır.(Gerekli açıklamalar Cascade konusunda)*/ session.save(ogrenci1); session.save(ogrenci2); 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="Ders.hbm.xml"/></session-factory>
</hibernate-configuration>
9-Konsol
.
.
.
INFO: HHH000262: Table not found: ders
Haz 20, 2016 10:18:01 AM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: ogrenci
Haz 20, 2016 10:18:01 AM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: ogrenci_ders
Haz 20, 2016 10:18:01 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: insert into ogrenci (AD, SOYAD) values (?, ?)
Hibernate: insert into ders (AD, OGRETMEN) values (?, ?)
Hibernate: insert into ogrenci (AD, SOYAD) values (?, ?)
Hibernate: insert into ders (AD, OGRETMEN) values (?, ?)
Hibernate: insert into ogrenci_ders (OGRENCI_ID, DERS_ID) values (?, ?)
Hibernate: insert into ogrenci_ders (OGRENCI_ID, DERS_ID) values (?, ?)
Hibernate: insert into ogrenci_ders (OGRENCI_ID, DERS_ID) values (?, ?)
Hiç yorum yok:
Yorum Gönder