Primary Key Generation Algorithms in Hibernate
Table of Contents
Hibernate software generates the primary key value dynamically by choosing an algorithm . We can configure primary key generation algorithm by using <generator> tag. This is sub tag of <ID> tag. In this post we are going to discussing what are the primary key generation algorithms in hibernate.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.narayanatutorial.hibernate.Student" table="student"> <id name="hid" column="HID" type="integer"> <generator class="increment"></generator> </id> <property name="sfirstname" column="SFIRSTNAME" type="string"></property> <property name="slastname" column="SLASTNAME" type="string"></property> <property name="srollnumber" column="SROLLNUMBER" type="integer"></property> </class> </hibernate-mapping>
Hibernate provides multiple algorithms
Algorithms
- increment
- assigned
- hilo ( high low )
- select
- native
- identity
- uuid
The default algorithm is assigned algorithm.
Here we are going discussing frequently using primary key generation algorithms
1) Assigned
It is default algorithm according to this algorithm the value assigned to the primary key field variable will become primary key value in the database.
<id name="hid" column="HID" type="integer"> <generator class="assigned"></generator> </id>
2) increment
We can configure increment algorithm as follows
<id name="hid" column="HID" type="integer"> <generator class="increment"></generator> </id>
Increment algorithm works with all database software. But the data type of primary key field must be int, short, byte, long.
3) sequence
We can configure the sequence algorithm as follows.
<id name="hid" column="HID" type="integer"> <generator class="sequence"> <param name="sequence" value="my-sequence"></param> </generator> </id>
If you are not specifying the sequence explicitly, the database software uses default sequence (+1) so each and every client request primary key increment +1.
We can set the our own sequence in the mapping file. For this first we have to create sequence in the database explicitly by using following code.
we will create sequence as follows.
create sequence my-sequence increment by 20
Configure our own sequence in the mapping file by using <param> tag. It is child tag of <generator> tag.
<id name="hid" column="HID" type="integer"> <generator class="sequence"> <param name="sequence" value="my-sequence"></param> </generator> </id>
Sequence algorithm is also applicable only on int, long, short, byte data types.
All database software does not support the sequence algorithm
Example
Oracle supports the sequence algorithm
MySQL does not support the sequence algorithm
4) hilo (high low)
This algorithm uses high low algorithm. It generates the hilo algorithm. It uses the database data column range.
<id name="hid" column="HID" type="integer"> <generator class="hilo"></generator> </id>
Conclusion
When we use any primary key generation algorithm make sure that it works in all database software. For this it is recommended to assigned or increment algorithm.
Hello! I am Narayanaswamy founder and admin of narayanatutorial.com. I have been working in the IT industry for more than 12 years. NarayanaTutorial is my web technologies blog. My specialties are Java / J2EE, Spring, Hibernate, Struts, Webservices, PHP, Oracle, MySQL, SQLServer, Web Hosting, Website Development, and IAM(ForgeRock) Specialist
I am a self-learner and passionate about training and writing. I am always trying my best to share my knowledge through my blog.