2017  Kodetalk | Feedback | Privacy Policy | Terms | About

How to choose the id generation strategy when using hibernate

I learn so many documents and site regarding hibernate auto id generation.

Its good experience for me to know about the functionality and all but littler confuse with the use of the ids.

I need proper explanation on these ids in a simpler way so that I can able to choose and use in my application in proper way.


All generators implement the interface org.hibernate.id.IdentifierGenerator. This is a very simple interface. Some applications can choose to provide their own specialized implementations, however, Hibernate provides a range of built-in implementations.

The shortcut names for the built-in generators are as follows with a bit simple explanation hope you like this:


  • Generates identifiers of type long, short or int that are unique only when no other process is inserting data into the same table. Do not use in a cluster.


  • Supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type long, short or int.


  • Uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type long, short or int


  • Uses a hi/lo algorithm to efficiently generate identifiers of type long, short or int, given a table and column (by default hibernate_unique_key and next_hi respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database.


  • Uses a hi/lo algorithm to efficiently generate identifiers of type long, short or int, given a named database sequence.


  • Uses a 128-bit UUID algorithm to generate identifiers of type string that are unique within a network (the IP address is used). The UUID is encoded as a string of 32 hexadecimal digits in length.


  • Uses a database-generated GUID string on MS SQL Server and MySQL.


  • selects identity, sequence or hilo depending upon the capabilities of the underlying database.


  • Lets the application assign an identifier to the object before save() is called. This is the default strategy if no element is specified.


  • Retrieves a primary key, assigned by a database trigger, by selecting the row by some unique key and retrieving the primary key value.


  • Uses the identifier of another associated object. It is usually used in conjunction with a primary key association.


  • A specialized sequence generation strategy that utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to return the generated identifier value as part of the insert statement execution. This strategy is only supported on Oracle 10g drivers targeted for JDK 1.4. Comments on these insert statements are disabled due to a bug in the Oracle drivers.
Answer is