Home Hibernate Hibernate4 Hibernate generator Element

Related Tutorials


 
 

Share on Google+Share on Google+

Hibernate generator Element

Advertisement
In this tutorial you will learn about the hibernate's generator element , which is used to auto generate the primary key value.

Hibernate <generator> Element

In this tutorial you will learn about the hibernate's <generator> element , which is used to auto generate the primary key value.

The <generator> tag is an optional child element of the element <id>. In <generator> a class name is to be assigned using which unique identifier is generated for the new record at the time of new record is saved or inserted into table. For example :

<class name="roseindia.Employee" table="employee">
<id name="empId" type="long" column="Id" >
<generator class="assigned"/>
</id>

A simple interface org.hibernate.id.IdentifierGenerator is implemented by all generators. Hibernate provides a various built-in implementations some of them built-in generators are as follows :

shortcut name for the built-in generators Description
increment For the type long, short or int identifiers are generated these
identifiers will not be remain unique if any other process inserts
data into the same table. It should not used in the
clustered environment.
identity In DB2, MySQL, MS SQL Server, Sybase and
HypersonicSQL an identity column is supported. The returned
type of an identifier may be long, short or int.
sequence In DB2, MySQL, MS SQL Server, Sybase and
HypersonicSQL an identity column is supported. The returned
type of an identifier may be long, short or int.
assigned This generator lets to assign an identifier to the object by
application before calling the save(). A default strategy if
generator element is not specified.
select This generator retrieves a primary key and primary key value
by selecting the row by some unique key that are
assigned by a database trigger
foreign This generator uses the identifier of another associated object.
Commonly used in conjunction with a primary key association.
sequence-identity Only supported by Oracle 10g drivers. It is a specialized
sequence generation strategy. For the actual value generation
it uses a database sequence.

NOTE  : If you put <generator class="native"/>, Hibernate automatically choose between identity, sequence or hilo algorithm to auto generate the primary key, by calculating the capabilities of the used database.

EXAMPLE

Given below the configuration XML file of table which is involved in one-to-one mapping, whose id/primary key will auto-generate using <generator> tag :

Worker.hbm.xml

<?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 package="net.roseindia">

<class name="Worker" table="worker">
<id name="workerId" column="worker_id">
<generator class="native" />
</id>
<one-to-one name="workerDetail" class="net.roseindia.WorkerDetail"
cascade="save-update"></one-to-one>

<property name="firstname" column="firstname" />
<property name="lastname" column="lastname" />
<property name="birthDate" type="date" column="birth_date" />
<property name="cellphone" column="cell_phone" />

</class>
</hibernate-mapping>

Here, we are using  <generator class="native"/>, means Hibernate automatically choose between identity, sequence or hilo algorithm to auto generate the primary key, by calculating the capabilities of the used database.

WorkerDetail.hbm.xml

<?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 package="net.roseindia">

<class name="WorkerDetail" table="workerdetail">

<id name="workerId" type="java.lang.Long">
<column name="worker_id" />
<generator class="foreign">
<param name="property">worker</param>
</generator>
</id>
<one-to-one name="worker" class="net.roseindia.Worker"
constrained="true"></one-to-one>

<property name="street" column="street" />
<property name="city" column="city" />
<property name="state" column="state" />
<property name="country" column="country" />
</class>

</hibernate-mapping>

In the above XML, we are using <generator class="foreign">, means this generator uses the identifier of another associated object(worker table).

For complete example, click here

Advertisements

If you enjoyed this post then why not add us on Google+? Add us to your Circles



Liked it!  Share this Tutorial


Follow us on Twitter, or add us on Facebook or Google Plus to keep you updated with the recent trends of Java and other open source platforms.

Posted on: March 27, 2012

Related Tutorials

Discuss: Hibernate generator Element  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:0
DMCA.com