@GeneratedValue with strategy=GenerationType.SEQUENCE in Hibernate
May 17, 2013
GenerationType.SEQUENCE in hibernate generates the sequence for the primary column of the table. We need to create a sequence generator in database and refer that name in the code. The syntax of GenerationType. SEQUENCE is given below.
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="course_seq") @SequenceGenerator( name="course_seq", sequenceName="course_sequence", allocationSize=20 )
EduCourse.java
package com.concretepage.persistence; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "edu_course") public class EduCourse { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="course_seq") @SequenceGenerator( name="course_seq", sequenceName="course_sequence", allocationSize=20 ) private int id; @Column(name = "course_name") private String courseName; @Column(name = "duration") private int duration; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCourseName() { return courseName; } public void setCourseName(String courseName) { this.courseName = courseName; } public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; } }
HibernateUtil.java
package com.concretepage.util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import com.concretepage.persistence.EduCourse; public class HibernateUtil { private static final SessionFactory concreteSessionFactory; static { try { concreteSessionFactory = new AnnotationConfiguration().configure() .buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static Session getSession() throws HibernateException { return concreteSessionFactory.openSession(); } public static void main(String... args) { Session session = getSession(); session.beginTransaction(); EduCourse course = new EduCourse(); course.setCourseName("B.Sc"); course.setDuration(3); session.save(course); session.getTransaction().commit(); session.close(); } }
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/hibernate</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"></property> <property name="hibernate.connection.pool_size">10</property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping class="com.concretepage.persistence.EduCourse"/> </session-factory> </hibernate-configuration>
edu_course Table
CREATE TABLE `edu_course` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `course_name` VARCHAR(255) NULL DEFAULT NULL, `duration` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB;