Hibernate Ders 05 – @OnetoOne Association
Merhaba Arkadaslar,
Hibernate notasyonlari araciligiyla tablolar arasinda iliskiler yonetilebilir.Bu iliskiler ;
- one to one
- one to many
- many to many
Bu dersimizde birebir iliski , (one-to-one association) den bahsetmeye ve bu konuda Hibernate ile basit bir ornek yapmaya calisacagim.
Entity ciftleri diger entity nin referansini icerebilir.
Entity ciftlerinden sadece biri digerinin referansini iceriyorsa bu unidirectionaldir.
Eger association(iliski) mutual (karsilikli) ise bidirectionaldir.
Buradaki ornegimiz unidirectional olacaktir..
Hemen baslayalim…
Daha onceki ornegimiz uzerinden devam ediyorum ve yeni bir package aciyorum, adina hibernate5_one2one_Assocation diyorum. Yeni bir sinif olusturalim Citizen olsun adi.
private int citizen_id; private String name; private String surname;
3 tane degisken tanimliyorum ve bunlarin getter/setter metotlarini olusturuyorum.
@Entity notasyonunu unutmadan koyalim.
@Id notasyonu koyalim ve bu sefer @GeneratedValue notasyonunda strategy olarak GenerationType.TABLE i kullanalim.
@Id @GeneratedValue(strategy = GenerationType.TABLE) public int getCitizen_id() { return citizen_id; }
2.sinifimiz olan, CitizenAddress sinifimizi olusturalim.
private int id; private String street; private String road; private String city; private String zipcode;
Getter/setter metotlarini olusturup , @Entity ve
@Id @GeneratedValue(strategy = GenerationType.TABLE) public int getId() { return id; }
notasyonlarimizi veriyoruz.
Tekrar Citizen sinifimiza geliyoruz
private CitizenAddress citizenAddress;
degiskenini ekleyip getter/setter olusturuyoruz.
@OneToOne notasyonunu uyguluyoruz , burada cascade= CascadeType.ALL ekleyerek sadece bir nesneyi save() ederek, 2 tabloya da ayni anda eklemis oluruz.
@JoinColumn(name=”address_ID”) name parametresi ile tablomuzun elemanina yeni isim veriyoruz. // komut satiri koyarak tabloyu inceleyin ve farki gorun.
@OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="address_ID") public CitizenAddress getCitizenAddress() { return citizenAddress; }
Citizen.java
package hibernate5_one2one_Association; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; /** * * @author Levent */ @Entity public class Citizen implements Serializable { private int citizen_id; private String name; private String surname; private CitizenAddress citizenAddress; @Id @GeneratedValue(strategy = GenerationType.TABLE) public int getCitizen_id() { return citizen_id; } public void setCitizen_id(int citizen_id) { this.citizen_id = citizen_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="address_ID") public CitizenAddress getCitizenAddress() { return citizenAddress; } public void setCitizenAddress(CitizenAddress citizenAddress) { this.citizenAddress = citizenAddress; } }
CitizenAddress.java
package hibernate5_one2one_Association; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; /** * * @author Levent */ @Entity public class CitizenAddress implements Serializable { private int id; private String street; private String road; private String city; private String zipcode; @Id @GeneratedValue(strategy = GenerationType.TABLE) public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getRoad() { return road; } public void setRoad(String road) { this.road = road; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } }
Bu ornegimizde daha onceki orneklerde yaptigimiz gibi degil farkli bir yoldan mapping islemi yapicaz.hibernate.cfg.xml dosyamizi kopyalayalim, ve hibernate2.cfg.xml diyelim.
<mapping class="hibernate5_one2one_Association.Citizen"/> <mapping class="hibernate5_one2one_Association.CitizenAddress"/>
Bir de sql ifadelerini Netbeans outputta gormek icin ekleyelim:
<property name="hibernate.show_sql">true</property>
Sira geldi test sinifimiza , CitizenTest diyelim.
CitizenTest.java
package hibernate5_one2one_Association; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * * @author Levent */ public class CitizenTest { public static void main(String[] args) { AnnotationConfiguration config = new AnnotationConfiguration(); // config.addAnnotatedClass(Citizen.class); // config.addAnnotatedClass(CitizenAddress.class); config.configure("hibernate2.cfg.xml"); new SchemaExport(config).create(true, true); //yeni bir schema olusturur. SessionFactory factory = config.buildSessionFactory(); Session session = factory.getCurrentSession(); session.beginTransaction(); CitizenAddress address1 = new CitizenAddress(); address1.setCity("Istanbul"); address1.setRoad("Istiklal Cad"); address1.setStreet("ozgurluk sokak"); address1.setZipcode("34000"); CitizenAddress address2 = new CitizenAddress(); address2.setCity("Izmit"); address2.setRoad("Fethiye Cad."); address2.setStreet("Muharebe Meydani Sokak"); address2.setZipcode("41000"); Citizen citizen1 = new Citizen(); citizen1.setName("Levent"); citizen1.setSurname("ERGUDER"); citizen1.setCitizenAddress(address1); Citizen citizen2 = new Citizen(); citizen2.setName("Recep"); citizen2.setSurname("Bostanci"); citizen2.setCitizenAddress(address2); session.save(citizen1); session.save(citizen2); // cascadeType.ALL oldugu icin session.save(address1); // ve session.save(address2) dememize gerek yok. session.getTransaction().commit(); } }
// config.addAnnotatedClass(Citizen.class); // config.addAnnotatedClass(CitizenAddress.class);
Gordugunuz gibi komut satiri koyduk ve bu islemi hibernate2.cfg.xml dosyasinda yaptik. config.configure(“hibernate2.cfg.xml”); satirinda hibernate2.cfg.xml i verdigimize dikkat edelim.
Calistirip sonucu gorelim 🙂
Tablolarimiz olustu 🙂
@GeneratedValue(strategy = GenerationType.TABLE) dedigimiz icin burada hibernate_sequence adinda bir tablo daha olustu.
Citizen tablomuz
CitizenAddress tablomuz
Bu yazimizinda sonuna geldik.
Kaynak dosya: HibernateTutorial_5
Herkese Bol Javali Gunler.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply