Hibernate Ders-8 @JoinTable Ve @JoinColumn
Merhaba arkadaşlar;
Bu yazımda @JoinTable ve @JoinColumn notasyonlarını anlatacağım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">19961903</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernateornekler</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping class="ders8JoinTableVeJoinColumn.Adres"/> <mapping class="ders8JoinTableVeJoinColumn.Personel"/> </session-factory> </hibernate-configuration> |
Hibernate ayar dosyamızda gerekli veritabanı bağlantı bilgileri ile veritabanına bağlantı sağladık. Kalıcı hale getirilmek istenen sınıflar belirtildi.
hibernate.hbm2ddl.auto => Update ile tablolarımız yoksa tablolarımızı oluşturduk.
hibernate.show_sql=> Console da sql kodları oluşturuldu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
package ders8JoinTableVeJoinColumn; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Adres implements Serializable { private static final long serialVersionUID = 1L; private Integer adresId; private String cadde; private String mahalle; private String sokak; private Integer apNo; @Id @GeneratedValue(strategy=GenerationType.AUTO) public Integer getAdresId() { return adresId; } public void setAdresId(Integer adresId) { this.adresId = adresId; } public String getCadde() { return cadde; } public void setCadde(String cadde) { this.cadde = cadde; } public String getMahalle() { return mahalle; } public void setMahalle(String mahalle) { this.mahalle = mahalle; } public String getSokak() { return sokak; } public void setSokak(String sokak) { this.sokak = sokak; } public Integer getApNo() { return apNo; } public void setApNo(Integer apNo) { this.apNo = apNo; } } |
@Entity => Sınıfımızı kalıcı sınıf haline getirdik.
@GeneratedValue(strategy=GenerationType.AUTO) => Primary Key belirtildi ve strateji olarak otomatik arttırılmayı sağladık.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
package ders8JoinTableVeJoinColumn; 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.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @Table(name="Personel") public class Personel implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String isim; private String soyisim; private Adres adres=new Adres(); public Personel() { } public Personel(String isim, String soyisim) { this.isim = isim; this.soyisim = soyisim; } @Id @GeneratedValue(strategy=GenerationType.AUTO) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public String getSoyisim() { return soyisim; } public void setSoyisim(String soyisim) { this.soyisim = soyisim; } @OneToOne(cascade=CascadeType.ALL) @JoinTable(name="Personel_Adresleri", //Tablo Oluşturarak İd Değerlerini Kullanarak Yeni Bir Tablo Oluşturuyor joinColumns=@JoinColumn(name="Personel_Id"), // Hakim Olan Sınıfın İlişki Kurduğu Kaydın Kolon Bilgisi inverseJoinColumns=@JoinColumn(name="Adres_Id") //Hakim Olmayan Sınıfın İlişki Kurduğu Kaydın Kolon Bilgisi ) public Adres getAdres() { return adres; } public void setAdres(Adres adres) { this.adres = adres; } } |
@Entity => Sınıfımızı kalıcı hale getirdik.
@Table(name=”Personel”) => Tablomuza isim özelliğini ekledik.
@GeneratedValue(strategy=GenerationType.AUTO) => Primary Key belirtildi ve strateji olarak otomatik arttırılmayı sağladık.
@OneToOne(cascade=CascadeType.ALL) => Bire-Bir ilişki kurduk ve alt nesnelerdeki işlemleri otomatik yaptırdık.
inverseJoinColumns => Hakim olmayan sınıfın ilişki kurduğu kaydın kolonu
@JoinTable => Tablo oluşturduk ve gerekli kolonları ekledik.
Oluşturmak istediğimiz tabloya ‘Personel_Adresleri’ ismini verdik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
package ders8JoinTableVeJoinColumn; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Yonetici { public static void main(String[] args) { Configuration configuration=new Configuration(); configuration.configure("ders8JoinTableVeJoinColumn/hibernate.cfg.xml"); //------------------------------------------------------------------- SessionFactory factory=configuration.buildSessionFactory(); Session session=factory.openSession(); Transaction transaction=session.getTransaction(); //-------------------------------------------------------------------- Personel personel=new Personel("Furkan", "KOC"); personel.getAdres().setApNo(18); personel.getAdres().setCadde("Hizir Reis"); personel.getAdres().setMahalle("Cumali"); personel.getAdres().setSokak("Bilinmez Sokak"); Personel personel2=new Personel("Osman", "KORUCU"); personel2.getAdres().setApNo(25); personel2.getAdres().setCadde("Kongre Caddesi"); personel2.getAdres().setMahalle("Universite Caddesi"); personel2.getAdres().setSokak("Deneme Sokagi"); //------------------------------------------------------------------------ transaction.begin(); session.save(personel); session.save(personel2); transaction.commit(); } } |
Configuration ile hibernate ayar dosyamızın yeri belirtilerek ayar dosyamız tanıtıldı. Ve bu Configuration ile gerekli SessionFactory nesnesi üretildi.
İşlem başlatılarak kayıt işlemleri yapıldı ve aşağıdaki gibi tablolar oluştu:
Gördüğünüz üzere oluşturmak istediğimiz tablo ve kolonlar oluşturuldu.