@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 IDEMaven 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 (?, ?, ?)
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