Hibernate Quick Guide
Hibernate Quick Guide
Hibernate is an Object-Relational MappingORM solution for JAVA and it raised as an open source
persistent framework created by Gavin King in 2001. It is a powerful, high performance Object-
Relational Persistence and Query service for any Java Application.
Hibernate maps Java classes to database tables and from Java data types to SQL data types and
relieve the developer from 95% of common data persistence related programming tasks.
Hibernate sits between traditional Java objects and database server to handle all the work in
persisting those objects based on the appropriate O/R mechanisms and patterns.
Hibernate Advantages:
Hibernate takes care of mapping Java classes to database tables using XML files and without
writing any line of code.
Provides simple APIs for storing and retrieving Java objects directly to and from the database.
If there is change in Database or in any table then the only need to change XML file
properties.
Abstract away the unfamiliar SQL types and provide us to work around familiar Java Objects.
Supported Databases:
Hibernate supports almost all the major RDBMS. Following is list of few of the database engines
supported by Hibernate.
DB2/NT
MySQL
PostgreSQL
FrontBase
Oracle
Following is a detailed view of the Hibernate Application Architecture with few important core
classes.
Hibernate uses various existing Java APIs, like JDBC, Java Transaction APIJTA, and Java Naming and
Directory Interface JNDI. JDBC provides a rudimentary level of abstraction of functionality common
to relational databases, allowing almost any database with a JDBC driver to be supported by
Hibernate. JNDI and JTA allow Hibernate to be integrated with J2EE application servers.
Following section gives brief description of each of the class objects involved in Hibernate
Application Architecture.
Configuration Object:
The Configuration object is the first Hibernate object you create in any Hibernate application and
usually created only once during application initialization. It represents a configuration or
properties file required by the Hibernate. The Configuration object provides two keys components:
Database Connection: This is handled through one or more configuration files supported
by Hibernate. These files are hibernate.properties and hibernate.cfg.xml.
This component creates the connection between the Java classes and database tables..
SessionFactory Object:
Configuration object is used to create a SessionFactory object which inturn configures Hibernate
for the application using the supplied configuration file and allows for a Session object to be
instantiated. The SessionFactory is a thread safe object and used by all the threads of an
application.
The SessionFactory is heavyweight object so usually it is created during application start up and
kept for later use. You would need one SessionFactory object per database using a separate
configuration file. So if you are using multiple databases then you would have to create multiple
SessionFactory objects.
Session Object:
A Session is used to get a physical connection with a database. The Session object is lightweight
and designed to be instantiated each time an interaction is needed with the database. Persistent
objects are saved and retrieved through a Session object.
The session objects should not be kept open for a long time because they are not usually thread
safe and they should be created and destroyed them as needed.
Transaction Object:
A Transaction represents a unit of work with the database and most of the RDBMS supports
transaction functionality. Transactions in Hibernate are handled by an underlying transaction
manager and transaction fromJDBCorJTA.
This is an optional object and Hibernate applications may choose not to use this interface, instead
managing transactions in their own application code.
Query Object:
Query objects use SQL or Hibernate Query Language HQL string to retrieve data from the database
and create objects. A Query instance is used to bind query parameters, limit the number of results
returned by the query, and finally to execute the query.
Criteria Object:
Criteria object are used to create and execute object oriented criteria queries to retrieve objects.
Make a choice whether you want to install Hibernate on Windows, or Unix and then proceed
to the next step to download .zip file for windows and .tz file for Unix.
Installing Hibernate:
Once you downloaded and unzipped the latest version of the Hibernate Installation file, you need
to perform following two simple steps. Make sure you are setting your CLASSPATH variable
properly otherwise you will face problem while compiling your application.
Now copy all the library files from /lib into your CLASSPATH, and change your classpath
variable to include all the JARs:
Finally copy hibernate3.jar file into your CLASSPATH. This file lies in the root directory of
the installation and is the primary JAR that Hibernate needs to do its work.
Hibernate Prerequisites:
Following is the list of the packages/libraries required by Hibernate and you should install them
before starting with Hibernate. To install these packages you would have to copy library files from
/lib into your CLASSPATH, and change your CLASSPATH variable accordingly.
S.N. Packages/Libraries
Hibernate Configuration
Hibernate requires to know in advance where to find the mapping information that defines how
your Java classes relate to the database tables. Hibernate also requires a set of configuration
settings related to database and other related parameters. All such information is usually supplied
as a standard Java properties file called hibernate.properties, or as an XML file named
hibernate.cfg.xml.
I will consider XML formatted file hibernate.cfg.xml to specify required Hibernate properties in
my examples. Most of the properties take their default values and it is not required to specify them
in the property file unless it is really required. This file is kept in the root directory of your
application's classpath.
Hibernate Properties:
Following is the list of important properties you would require to configure for a databases in a
standalone situation:
1 hibernate.dialect
This property makes Hibernate generate the appropriate SQL for the chosen database.
2 hibernate.connection.driver_class
3 hibernate.connection.url
4 hibernate.connection.username
5 hibernate.connection.password
6 hibernate.connection.pool_size
Limits the number of connections waiting in the Hibernate database connection pool.
7 hibernate.connection.autocommit
If you are using a database along with an application server and JNDI then you would have to
configure the following properties:
1 hibernate.connection.datasource
The JNDI name defined in the application server context you�re using for the application.
2 hibernate.jndi.class
4 hibernate.jndi.url
5 hibernate.connection.username
6 hibernate.connection.password
The XML configuration file must conform to the Hibernate 3 Configuration DTD, which is available
from http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd.
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
</session-factory>
</hibernate-configuration>
The above configuration file includes <mapping> tags which are related to hibernate-mapping
file and we will see in next chapter what exactly is a hibernate mapping file and how and why do
we use it. Following is the list of various important databases dialect property type:
HSQLDB org.hibernate.dialect.HSQLDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Informix org.hibernate.dialect.InformixDialect
Ingres org.hibernate.dialect.IngresDialect
Interbase org.hibernate.dialect.InterbaseDialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
Progress org.hibernate.dialect.ProgressDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Hibernate Examples
Let us try an example of using Hibernate to provide Java persistence in a standalone application.
We will go through different steps involved in creating Java Application using Hibernate
technology.
The first step in creating an application is to build the Java POJO class or
classes, depending on the application that will be persisted to the
database. Let us consider our Employee class with getXXX and setXXX
methods to make it JavaBeans compliant class.
public Employee() {}
public Employee(String fname, String lname, int salary) {
this.firstName = fname;
this.lastName = lname;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName( String first_name ) {
this.firstName = first_name;
}
public String getLastName() {
return lastName;
}
public void setLastName( String last_name ) {
this.lastName = last_name;
}
public int getSalary() {
return salary;
}
public void setSalary( int salary ) {
this.salary = salary;
}
}
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<meta attribute="class-description">
This class contains the employee detail.
</meta>
<id name="id" type="int" column="id">
<generator />
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
<property name="salary" column="salary" type="int"/>
</class>
</hibernate-mapping>
You should save the mapping document in a file with the format <classname>.hbm.xml. We saved
our mapping document in the file Employee.hbm.xml. Let us see little detail about the mapping
document:
The <class> elements are used to define specific mappings from a Java classes to the
database tables. The Java class name is specified using the name attribute of the class
element and the database table name is specified using the table attribute.
The <meta> element is optional element and can be used to create the class description.
The <id> element maps the unique ID attribute in class to the primary key of the database
table. The name attribute of the id element refers to the property in the class and the
column attribute refers to the column in the database table. The type attribute holds the
hibernate mapping type, this mapping types will convert from Java to SQL data type.
The <generator> element within the id element is used to automatically generate the
primary key values. Set the class attribute of the generator element is set to native to let
hibernate pick up either identity, sequence or hilo algorithm to create primary key
depending upon the capabilities of the underlying database.
The <property> element is used to map a Java class property to a column in the database
table. The name attribute of the element refers to the property in the class and the column
attribute refers to the column in the database table. The type attribute holds the hibernate
mapping type, this mapping types will convert from Java to SQL data type.
There are other attributes and elements available which will be used in a mapping document and I
would try to cover as many as possible while discussing other Hibernate related topics.
import java.util.List;
import java.util.Date;
import java.util.Iterator;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
You would get following result, and records would be created in EMPLOYEE table.
$java ManageEmployee
.......VARIOUS LOG MESSAGES WILL DISPLAY HERE........