Hibernate – Ders 16 Sequence
Merhaba Arkadaslar,
Bu dersimizde , Hibernate’te , Sequence notasyonunu kullanacagiz. Su yazimda Oracle DB de sequence konusunu islemistik. oracle-ders-9-sequence
Hibernate derslerimizde, 15.ders haric postgresql kullandik bu dersimiz de yine postgresql kullanacagiz. Bazi VTYS (veri tabani yonetim sistemi) sequence i desteklemiyor. Ornegin MySQL de Sequence yapisi yerine auto increment yapisi vardir .
Peki diyelim auto increment yapisi degil de sequence yapisi kullanmak istersek ? Bunun icin @SequenceGenerator notasyonumuzu kullanacagiz. Basit bir ornek uzerinde uygulamamizi yapalim.
Her zamanki gibi yeni bir sinif olusturdum ve 3 adet degiskenim var ve gerekli getter/setter yapisini olusturuyorum bunun icin Netbeansten yardim almamiz mantikli , ya da Eclipse ten 🙂
Iste JavaBoys sinifimiz…
JavaBoys.java
package hibernate16_Sequence; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; /** * * @author Levent */ @Entity public class JavaBoys implements Serializable { private int id; private String name; private String surname; private int age; @Id @SequenceGenerator(name = "SeqGenerator", sequenceName = "hibernate_sequence") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SeqGenerator") public int getId() { return id; } public void setId(int id) { this.id = 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; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Su kısma dikkat edelim…
@Id @SequenceGenerator(name = "SeqGenerator", sequenceName = "hibernate_sequence") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SeqGenerator") public int getId() { return id; }
id degiskenimiz bizim primary key alanimiz olacaktir, daha oncede belirtigim gibi Hibernate mutlaka bir primary key alani ister bunu gerek @Id notasyonu gerekse xml konfigurasyonunda belirtmek zorunlulugu vardir.
@SequenceGenerator notasyonu ile bir Sequence olusturuyoruz , name ozelligi ile Java kodumuzdaki bu sequence’in adini belirtirken sequenceName ozelligi ise veritabanindaki olusturacagimiz sequence objesinin ismi olacaktir.
Daha onceki derslerde @GeneratedValue notasyonu da kullanmistik ve strategy ozelligi bize bir yontem secmemizi saglar. Bunlardan AUTO ve TABLE i daha onceki derslerde kullanmistik. Burada SEQUENCE , GenerationType i kullanacagiz.
SequenceTest.java
package hibernate16_Sequence; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * * @author Levent */ public class SequenceTest { public static void main(String[] args) { AnnotationConfiguration config = new AnnotationConfiguration(); config.addAnnotatedClass(JavaBoys.class); config.configure("hibernate.cfg.xml"); new SchemaExport(config).create(true, true); SessionFactory factory = config.buildSessionFactory(); Session session = factory.getCurrentSession(); session.beginTransaction(); JavaBoys javaBoy1 = new JavaBoys(); javaBoy1.setAge(23); javaBoy1.setName("Levent"); javaBoy1.setSurname("Erguder"); JavaBoys javaBoy2 = new JavaBoys(); javaBoy2.setAge(23); javaBoy2.setName("Recep"); javaBoy2.setSurname("Bostanci"); JavaBoys javaBoy3 = new JavaBoys(); javaBoy3.setAge(23); javaBoy3.setName("Cagri"); javaBoy3.setSurname("Cetin"); JavaBoys javaBoy4 = new JavaBoys(); javaBoy4.setAge(23); javaBoy4.setName("Mesut"); javaBoy4.setSurname("Aygun"); session.save(javaBoy1); session.save(javaBoy2); session.save(javaBoy3); session.save(javaBoy4); session.getTransaction().commit(); } }
Daha onceki derslerde buradaki her ifadeyi detayli olarak anlattigim icin burada tekrar yazmiyorum. Basitce 4 tane kayit ekliyoruz .
Calistirip sonucu gorelim 🙂
Netbeans Output
JavaBoys tablomuz ve hibernate_sequence isimli Sequence objemiz olustu.
… ve ekledigimiz kayitlar….
Dikkat ederseniz id degeri 50 den baslamaktadir, bunun nedeni @SequenceGenerator varsayilan olarak 50 den baslatir. allocationSize ozelligi ile istedigimiz sayidan baslatabiliriz.
@SequenceGenerator(name = "SeqGenerator", sequenceName = "hibernate_sequence",allocationSize = 5 )
ve tekrar calistirip sonucu gorelim…
Id alani 5 ten basladi ve bu dersimiz de burada son buldu 🙂
Kaynak Kodlar: HibernateTutorial_v16
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply