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

hibernate_16_sequence_1

JavaBoys tablomuz ve hibernate_sequence isimli Sequence objemiz olustu.

hibernate_16_sequence_2

… ve ekledigimiz kayitlar….

hibernate_16_sequence_3

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…

hibernate_16_sequence_4

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

 

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *