@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 tablosuna personel tablosuna ait personel_ID kolonu biz eklemediğimiz halde otomatik olarak eklenmiştir. Sebebi one-to-one ilişkisinin olmasıdır.
2-Proje

3-Entity (Model) Sınıfları
Personel.java
package com.hasanburakavci.model; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name="personel") public class Personel implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="ID") private int id; @Column(name="AD") private String ad; @Column(name="SOYAD") private String soyad; //mappedBy ile hakim olan taraf PersonelDetay oldu. @OneToOne(mappedBy="personel", cascade=CascadeType.ALL) private PersonelDetay personelDetay; //---------Yapılandırıcı----------- public Personel() { } //---------Setter-Getter--------- }
PersonelDetay.java
package com.hasanburakavci.model; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name="personeldetay") public class PersonelDetay implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="ID") private int id; @Column(name="ADRES") private String adres; @Column(name="TELEFON_NUMARASI") private long telefonNumarasi; //Personel tablosuna birebir ilişkilendirildi. @OneToOne private Personel personel; //---------Yapılandırıcı------------- public PersonelDetay() { } //----------Setter-Getter------------- }
4-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; } }
5-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(); } } }
6-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>
7.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 class="com.hasanburakavci.model.Personel"/> <mapping class="com.hasanburakavci.model.PersonelDetay"/> </session-factory> </hibernate-configuration>
8-Konsol
.
.
.
INFO: HHH000262: Table not found: personeldetay
Haz 18, 2016 3:18:39 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: personel
Haz 18, 2016 3:18:39 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: HHH000262: Table not found: personeldetay
Haz 18, 2016 3:18: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, personel_ID, TELEFON_NUMARASI) values (?, ?, ?)
9-Veritabanı Tabloları

personel tablosuna ait ad ve soyad kolonları oluştu. Personel sınıfı hakim olmayan taraf olduğu için (mappedBy="personel") PersonelDetay sınıfına ait id kolonu bulunmamaktadır.

personeldetay tablosuna ait adres telefon numarası kolonları oluştu. PersonelDetay sınıfı hakim olan
taraf olduğu için Personele sınıfına ait id değeri de oluştu.
Hiç yorum yok:
Yorum Gönder