Hibernate Ders-7 ManyToMany Association(Çoğa-Çok İlişki)
Merhaba arkadaşlar;
Bu yazımda size ilişkisel veritabanı türlerinden ManyToMany(Çoğa-Çok) ilişkisinden bahsetmek istiyorum.
ManyToMany(Çoğa-Çok) İlişki Nedir?
Bir tablodaki bir kaydın başka bir tabloda yer alan birden fazla kayıt ile ilişki kurabilmesine denir.
Şimdi konuyu daha iyi anlamak için örnek üzerinde inceleyelim.
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="ders7ManyToMany.Adres"/> <mapping class="ders7ManyToMany.Personel"/> </session-factory> </hibernate-configuration> |
Hibernate ayar dosyamızda gerekli ayarlamaları yapıyoruz. Burada
hibernate.show_sql => Program koşturulduğunda oluşan işlemlerin sql kodlarını otomatik olarak console ekranında gösterilmesini sağlar.
hibernate.hbm2ddl.auto =>Kalıcı hale getirdiğimiz sınıfların veritabanındaki durumlarını ayarlar.Alacağı değerler şu şekildedir.
Update => Eğer tablomuz yoksa tabloyu oluşturur, eğer tablomuz mevcut ise içerisindeki verilerde gerekli güncellemeleri yapar.
Create => Veritabanımızda tablolarımız mevcut değilse tablolarımızı oluşturur. Eğer gerekli tablolarımız mevcut ise tabloları siler ve en baştan oluşturur.Tabloları sildiği için verileri de silmiş olur.
Create-Drop => Veritabanı session sonrası silinir ve yeni sessionda tekrardan yüklenir.
Şimdi kalıcı sınıflarımızı tanıtalı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 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 |
package ders7ManyToMany; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; /** * * @author Furkan KOÇ * */ @Entity public class Personel implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String isim; private String soyisim; Set<Adres>adres=new HashSet<>(); @ManyToMany(cascade=CascadeType.ALL) public Set<Adres> getAdres() { return adres; } public void setAdres(Set<Adres> adres) { this.adres = adres; } @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; } } |
@ManyToMany =>Çoğa çok ilişki için gerekli notasyon.
Not=> ManyToMany koleksiyonlardan olmak zorundadır.
@GeneratedValue(strategy=GenerationType.AUTO) => Değerimizi birincil anahtar olarak tanıtır ve strateji olarak değerimizin otomatik arttırılmasını sağlar.
cascade=CascadeType.ALL => Kalıcı nesnelerimizde kullandığımız alt nesnelerimizi işleme tabi tutmamızı zorunlu tutmaz.
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 97 98 99 100 101 |
package ders7ManyToMany; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; /** * * @author Furkan KOÇ * */ @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; Set<Personel>personels=new HashSet<>(); public Adres() { } @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; } } |
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 |
package ders7ManyToMany; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Yonetici { /** * * @Furkan KOÇ */ public static void main(String[] args) { //SessionFactory factory=new Configuration().configure().buildSessionFactory(); Configuration configuration=new Configuration(); SessionFactory factory=configuration.configure("ders7ManyToMany/hibernate.cfg.xml").buildSessionFactory(); Session session=factory.openSession(); Transaction transaction=session.getTransaction(); //--------------------------------------------------------------------------------------------- Adres adres=new Adres(); adres.setApNo(25); adres.setCadde("Hizir Reis Caddesi"); adres.setMahalle("Evliya Celebi Mahallesi"); adres.setSokak("Kavak Sokak"); Adres adres2=new Adres(); adres2.setApNo(81); adres2.setCadde("Cedidiye Caddesi"); adres2.setMahalle("Korkusuz Mahallesi"); adres2.setSokak("Ecehan Sokak"); //--------------------------------------------------------------------------------------------- Personel personel=new Personel(); personel.setIsim("Furkan"); personel.setSoyisim("KOC"); personel.getAdres().add(adres); personel.getAdres().add(adres2); Personel personel2=new Personel(); personel2.setIsim("Osman"); personel2.setSoyisim("Korucu"); personel2.getAdres().add(adres); personel2.getAdres().add(adres2); //--------------------------------------------------------------------------------------------- transaction.begin(); session.save(personel); session.save(personel2); transaction.commit(); } } |
Ve en son tablolarımızın son hali:
Görüldüğü üzere çoğa-çok ilişki kuruldu ve gerekli kayıtlar eklendi…