20 Nisan 2014 Pazar

Many-to-many Association XML Mapping

   Merhaba arkadaşlar,

   Bugün sizlere aralarında many-to-many ilişkisi bulunan öğrencilerin ve onların almış olduğu derslerin bilgisinin tutulduğu iki tablo kullanarak örnek bir proje oluşturacağım.

   Öncelikle veritabanı aracımızda 'Ogrenciler' ve 'Dersler' adında iki tablo oluşturacağız. Ben veritabanı aracı olarak MySQL kullandığımı daha önceden belirtmiştim. Kendi MySQL WorkBench'imde 'Ogrenciler' ve 'Dersler' adında iki tablo oluşturdum.

CREATE TABLE `uyeler`.`ogrenciler` (
`OgrenciId` INT NOT NULL AUTO_INCREMENT,
`OgrenciAdSoyad` VARCHAR(45) NULL,
PRIMARY KEY (`OgrenciId`));

CREATE TABLE `uyeler`.`dersler` (
`DersId` INT NOT NULL AUTO_INCREMENT,
`DersAdi` VARCHAR(45) NULL,
PRIMARY KEY (`DersId`));

Yukarıdaki tabloları oluşturduktan sonra tablolar arasındaki ilişkinin many-to-many olmasından dolayı üçüncü bir ilişki tablosu oluşturmamız gerekiyor. 'Kayit' adında yeni bir ilişki tablosu oluşturacağız.

CREATE TABLE `uyeler`.`kayit` (
`DersId` INT NOT NULL,
`OgrenciId` INT NOT NULL,
PRIMARY KEY (`DersId`, `OgrenciId`),
CONSTRAINT `DersId`
FOREIGN KEY (DersId)
REFERENCES `uyeler`.`dersler` (DersId)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `OgrenciId`
FOREIGN KEY (OgrenciId)
REFERENCES `uyeler`.`ogrenciler` (OgrenciId)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Daha önceden oluşturduğumuz 'Ogrenciler' ve 'Dersler' adındaki tabloların primary keylerini bu tabloda foreign key olarak belirledik.
Tablo yapılarımızı oluşturduktan sonra içlerine kayıt ekleyelim.

                       'Dersler' tablosu                                            'Ogrenciler' tablosu 
   
       

Şimdi bu iki tablo arasındaki many-to-many ilişkiyi gösteren 'Kayit' tablosuna kayıt ekleyelim.

                                                        'Kayit' tablosu
                                        

Veritabanına kayıt ekleme işlemlerini tamamladıktan sonra Hibernate kısmına geçelim. Öncelikle boş bir proje açıyoruz. Açtığımız projeye daha önceki yazılarımda değindiğim Hibernate kütüphanelerini içeren User Libraryimizi dahil ediyoruz. Daha sonra veritabanımızda oluşturduğumuz tablolarımızın POJO sınıflarını oluşturuyoruz. 'Dersler' tablosunu eşlemek için aynı isimli bir java sınıfı oluşturuyoruz.

Dersler.java


Öğrenci bilgisini içeren 'Ogrenciler' adındaki tabloyu eşlemek için Ogrenciler adında yeni bir java sınıfı oluşturuyoruz.
Ogrenciler.java


Daha sonra veritabanında oluşturduğumuz tabloları eşlemek için  XML mapping dosyalarını oluşturuyoruz.

Dersler.hbm.xml

'Dersler' tablosunun XML eşlemesini tamamladıktan sonra 'Ogrenciler' tablosunun XML eşlemesini yapıyoruz. Bu işlem için Ogrenciler.hbm.xml adında yeni bir XML dosyası oluşturuyoruz.

Ogrenciler.hbm.xml

XML mapping işlemini tamamladıktan sonra Hibernate configuration dosyamızı oluşturuyoruz.

hibernate.cfg.xml


Oluşturduğumuz bu xml dosyasına veritabanı bağlantı bilgilerimizi ve daha önceden oluşturduğumuz xml mapping dosyalarımızın kaynağını belirtiyoruz.

Daha sonra SessionFactory oluşturarak Hibernate işlemlerimizi sağlayan HibernateUtil adında yeni bir sınıf oluşturuyoruz.

HibernateUtil.java


Yukarıda belirttiğimiz tüm bu işlemlerden sonra ana sınıfımız olan Main sınıfında yeni ders kayıtları ve öğrenci kayıtları oluşturup, bu kayıtlar arasındaki ilişkiyi belirten kodu yazıyoruz. 

Main.java


Kültürel Etkinlik ve Almanca adında yeni 2 ders kaydı oluşturduk. Aynı zamanda Zeki Bahar ve Kamil Gunes adında iki yeni öğrenci oluşturduk ve bu öğrencilerin Kültürel etkinlik ve Almanca derslerini almalarını sağladık. Buradan da anlaşılacağı üzere bir dersi birden fazla öğrenci alabilir ve bir öğrenci birden fazla ders alabilir (many-to-many ilişkisi).
Bu işlemler sonucunda veritabanımızdaki tablolarımızın son hali şu şekilde olacaktır.

                        Dersler tablosu                                             Ogrenciler tablosu

  
                                         
                                                                       Kayit tablosu

Burada yazıma son veriyorum. Bir sonraki yazımda görüşmek üzere. Esen kalın...

Hiç yorum yok:

Yorum Gönder