Hibernate

Hibernate 2 – @Table, @Column, @GeneratedValue, @SecondaryTable, @Temporal

Merhaba arkadaşlar, bu yazı ile birlikte Hibernate derslerine devam ediyoruz.

Bu yazıda;

@Table ile oluşturacaağımız tablonun adını değiştirmeyi,

@Column ile oluşturacağımız tablodaki sütun adlarını değiştirmeyi,

@GeneratedValue ile auto ‘id’ üretmeyi ve Veritabanımızda sequence oluşturmayı,

@Temporal ile veri tabanımıza Tarih ve Saat girişleri yapmayı,

@SecondaryTable ile aynı class’tan birden fazla tablo oluşturmayı öğreneceğiz.

 

Dersimize eclipse üzerinden devam edeceğiz ve yine Maven tabanlı yapacağız. Bir önceki derste Maven projesi nasıl açılır ve kullanılır görmüştük. Ver derslerimize yine aynı proje üzerinden ilerleyeceğiz.

Yine PostgreSQL ‘ de Hibernate adında bir veritabanı oluşturuyoruz.

 

İlk örneğimize başlıyoruz.

 

1 Resim Ders 2

 

@Entity(name = “MY_STUDENT”)       diyerek tablomuza bir isim verebiliriz, bir farklı kullanım ise

@Table  Annotation’ını kullanarak aynı şekilde  tablomuza bir isim verebiliriz,

@Table(name = “MY_STUDENT”)     eğer bunlardan hiç birini kullanmaz isek tablomuzun ismi class ismi ile aynı olucaktır.

Bir diğer Annotation ise @Column, tabloda oluşturacağımız sütunların ismini değiştirmemize yarıyor. Eğer kullanmaz isek tablomuzun isimleri oluşturduğumuz property’ler ile aynı olacaktır.

 

@GeneratedValue ise biz her seferinde yeni bir kayıt eklediğimizde manual olarak ‘id’ vermemize gerek kalmıyor auto olarak kendi her kayıt için ‘id’ oluşturuyor. Veritabanımızda ‘sequence’ nesnesini de auto oluşturmakta.

 

 

Main methodumuzun bulundu class’ımızda ise bu sefer her kayıt için ‘id’ vermemize gerek kalmadı. Kendisi zaten otomatik bir şekilde oluşturacak.

 

2 Resim Ders 2

 

Resimde de görüldüğü üzere ‘id’ değerini biz vermedik.

 

 

Bir önceki derste hazırladığımız hibernate.cfg.xml dosyamızda hiç bir değişiklik yapmadan uygulamamızı çalıştırdığımızda ;

 

3 Resim Ders 2

 

Resimde de görüldüğü gibi tablo ve sütunların isimlerinin değiştiğini görmekteyiz.

Id değerini vermedimiz halde auto oluştuğunuda görmekteyiz ve veritabanımızda hibernate_sequence nesnesinin oluştuğunu Data Source Explorer de görmekteyiz.

 

Sequence Nedir?

Primary key (birincil anahtar) olarak kullanılan alanlar özel bir yapıda değilse otomatik artan alan olarak kullanılır. Veri tabanında  otomatik artan alanlar kullanmak için sequence’lere ihtiyacımız var.

 

PostgreSQL de ise aynı şekilde tablomuz oluştuğunu aşağıdaki resimden görmüş olduk.

 

4 Resim Ders 2

 

Bir diğer örneğimizde ise;

@GeneratedValue(strategy = GenerationType.AUTO) 

Id değerimizin otomatik oluşturulmasında  strategy özelliğini vermek uygulamamızın daha performanslı çalışmasını sağlamaktadır.

 

 

 

@SecondaryTable(name = “TableName”) ;

Aynı class’tan ikinci bir tablo oluşturmak için @SecondaryTable annotation’u kullanırız.

Peki hangi property’lerin oluşturacağımız ikinci tabloya eklenmesini istersek

@Column(table = “tableName”) belirtmemiz gerekiyor.

 

 

Main method’un bulunduğu class’a baktığımızda parametre alan constructor’ımıza değerleri gönderiyoruz.

 

 

hibernate.cfg.xml dosyasında hiç bir değişiklik yapmadan uygulamamızı çalıştırdığımızda;

 

5 Resim Ders 2

 

Resimde de görüldüğü gibi bir my_student ve studentdetail tablolarının oluştuğunu görmekteyiz.

my_student tablomuzda oluşturduğumuz primarykey, studentdetail tablosuna foreignkey olarak eklediğini görmekteyiz.

PostgreSQL veri tabanımıza baktığımızda ise aynı tabloların orada oluştuğunu görmekteyiz.

PostgresSQL de ufak bir sorgu ile bir kullanıcının tüm verilerini aynı tabloda gösterebiliriz.

 

6 Resim Ders 2

 

SQL Editor’u açmak için ilk önce resimde ok işaretiyle gösterildiği ikona tıklayıp SQL sorgumuzu yazarak resmin alt tarafında bütün verileri aynı tabloda göstermiş olduk.

 

Bir sonraki örneğimizde  @Temporal kullanımına bakacağız.

Bu annotation ise veri tabanımıza tarih girişi yapmamızı sağlar.

Örneğin bir kullanıcının kayıt olduğu tarih veya doğum günü , işe alınma vs, gibi verileri tutmamızı sağlar.

Kullanımı ise Date arabirimini kullanarak yapacağız.

Student class’mızda aşağıdaki gibi kullanıyoruz.

 

 

Main method’umuzda ise ;

new Date() nesne si ile şuan ki tarihi alabiliriz.

Uygulamamızı çalıştırdığımız da veri tabanımıza tarih verisi eklemiş olduk..

 

6 Resim Ders 2

 

Bugünlük burada sonlandırıyorum, bir sonraki dersimizde birden fazla class ile bir den fazla tablo oluşturup aralarındaki ilişkilerinden bahsedeceğim, @Temporal annotations’un diğer kullanımlarını da anlatacağım görüşmek üzere 🙂

 

Dumlupınar Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği 3.sınıf öğrencisiyim.
Bir Java aşığı olarak Java teknolojileri üzerinde kendimi geliştiriyorum.
Adana’lıyım