2. HIBERNATE TUTORIALSimply Easy Learning by
tutorialspoint.comtutorialspoint.com
3. TUTORIALS POINTSimply Easy LearningABOUT THE
TUTORIALHibernate TutorialHibernate is a high-performance
Object/Relational persistence and query service which is licensed
under theopen source GNU Lesser General Public License (LGPL) and
is free to download. Hibernate not only takes careof the mapping
from Java classes to database tables (and from Java data types to
SQL data types), but alsoprovides data query and retrieval
facilities.This tutorial will teach you how to use Hibernate to
develop your database based web applications in simple andeasy
steps.AudienceThis tutorial is designed for Java programmers with a
need to understand the Hibernate framework and API. Aftercompleting
this tutorial you will find yourself at a moderate level of
expertise in using Hibernate from where youcan take yourself to
next levels.PrerequisitesWe assume you have good understanding of
the Java programming language. A basic understanding ofrelational
databases, JDBC and SQL is very helpful.Copyright & Disclaimer
Notice All the content and graphics on this tutorial are the
property of tutorialspoint.com. Any content fromtutorialspoint.com
or this tutorial may not be redistributed or reproduced in any way,
shape, or formwithout the written permission of tutorialspoint.com.
Failure to do so is a violation of copyright laws.This tutorial may
contain inaccuracies or errors and tutorialspoint provides no
guarantee regarding theaccuracy of the site or its contents
including this tutorial. If you discover that the
tutorialspoint.com siteor this tutorial content contains some
errors, please contact us at [email protected]
4. TUTORIALS POINTSimply Easy LearningTable of ContentHibernate
Tutorial
....................................................................
2Audience..................................................................................
2Prerequisites............................................................................
2Copyright & Disclaimer
Notice.................................................. 2ORM
Overview.........................................................................
8Pros and Cons of
JDBC...................................................................................8Why
Object Relational Mapping
(ORM)?.........................................................8What
is ORM?
..............................................................................................9Java
ORM
Frameworks................................................................................10Hibernate
Overview
...............................................................
11Hibernate
Advantages.................................................................................11Supported
Databases..................................................................................12Supported
Technologies..............................................................................12Hibernate
Architecture
...........................................................
13Configuration
Object...................................................................................14SessionFactory
Object
.................................................................................14Session
Object............................................................................................15Transaction
Object......................................................................................15Query
Object..............................................................................................15Criteria
Object............................................................................................15Hibernate
Environment
..........................................................
16Downloading
Hibernate:..............................................................................16Installing
Hibernate.....................................................................................17Hibernate
Prerequisites...............................................................................17Hibernate
Configuration
.........................................................
18Hibernate
Properties...................................................................................18Hibernate
with MySQL
Database..................................................................19Hibernate
Sessions................................................................
21Session Interface Methods
..........................................................................22Hibernate
Persistent
Class..................................................... 24A
simple POJO
example:..............................................................................24Hibernate
Mapping Files
........................................................
26Hibernate Mapping Types
...................................................... 29Primitive
types
...........................................................................................29Date
and time
types....................................................................................29Binary
and large object
types.......................................................................30JDK-related
types........................................................................................30
5. TUTORIALS POINTSimply Easy LearningHibernate
Examples...............................................................
31Create POJO
Classes....................................................................................31Create
Database
Tables...............................................................................32Create
Mapping Configuration File
...............................................................32Create
Application Class
..............................................................................33Compilation
and Execution
..........................................................................35Hibernate
O/R Mapping
.........................................................
36Collections Mappings
............................................................................36Hibernate
Set
Mappings..............................................................................36Define
RDBMS Tables
................................................................................37Define
POJO
Classes...................................................................................37Define
Hibernate Mapping File
..................................................................39Create
Application Class
............................................................................40Compilation
and
Execution........................................................................42Hibernate
SortedSet Mappings
....................................................................43Define
RDBMS Tables
................................................................................43Define
POJO
Classes...................................................................................44Define
Hibernate Mapping File
..................................................................45Create
Application Class
............................................................................47Compilation
and
Execution........................................................................49Hibernate
List
Mappings..............................................................................50Define
RDBMS Tables
................................................................................50Define
POJO
Classes...................................................................................51Define
Hibernate Mapping File
..................................................................52Create
Application Class
............................................................................53Compilation
and
Execution........................................................................55Hibernate
Bag Mappings
.............................................................................57Define
RDBMS Tables
................................................................................57Define
POJO
Classes...................................................................................57Define
Hibernate Mapping File
..................................................................58Create
Application Class
............................................................................60Compilation
and
Execution........................................................................62Hibernate
Map Mappings
............................................................................63Define
RDBMS Tables
................................................................................63Define
POJO
Classes...................................................................................63Define
Hibernate Mapping File
..................................................................65Create
Application Class
............................................................................66Compilation
and
Execution........................................................................68Hibernate
SortedMap Mappings
..................................................................69
6. TUTORIALS POINTSimply Easy LearningDefine RDBMS Tables
................................................................................69Define
POJO
Classes...................................................................................70Define
Hibernate Mapping File
..................................................................71Compilation
and
Execution........................................................................75Association
Mappings
...........................................................................76Hibernate
Many-to-One Mappings
...............................................................76Define
RDBMS Tables
................................................................................76Define
POJO
Classes...................................................................................77Define
Hibernate Mapping File
..................................................................79Compilation
and
Execution........................................................................82Hibernate
One-to-One Mappings
.................................................................83Define
RDBMS Tables
................................................................................83Define
POJO
Classes...................................................................................84Define
Hibernate Mapping File
..................................................................86Compilation
and
Execution........................................................................89Hibernate
One-to-Many Mappings
...............................................................90Define
RDBMS Tables
................................................................................90Define
POJO
Classes...................................................................................91Define
Hibernate Mapping File
..................................................................92Create
Application Class
............................................................................93Compilation
and
Execution........................................................................95Hibernate
Many-to-Many
Mappings.............................................................96Define
RDBMS Tables
................................................................................97Define
POJO
Classes...................................................................................97Define
Hibernate Mapping File
..................................................................99Create
Application Class
..........................................................................100Compilation
and
Execution......................................................................102Component
Mappings...............................................................................103Hibernate
Component
Mappings................................................................103Define
RDBMS Tables
..............................................................................103Define
POJO
Classes.................................................................................104Define
Hibernate Mapping File
................................................................106Create
Application Class
..........................................................................107Compilation
and
Execution......................................................................109Hibernate
Annotations..........................................................
111Environment Setup for Hibernate
Annotation..............................................111Annotated
Class Example
..........................................................................111@Entity
Annotation
..................................................................................112@Table
Annotation...................................................................................113
7. TUTORIALS POINTSimply Easy Learning@Id and @GeneratedValue
Annotations.....................................................113@Column
Annotation
...............................................................................113Create
Application Class
............................................................................113Database
Configuration.............................................................................115Compilation
and Execution
........................................................................116Hibernate
Query Language..................................................
117FROM
Clause............................................................................................117AS
Clause.................................................................................................117SELECT
Clause
..........................................................................................118WHERE
Clause..........................................................................................118ORDER
BY Clause
......................................................................................118GROUP
BY
Clause......................................................................................118Using
Named
Paramters............................................................................119UPDATE
Clause.........................................................................................119DELETE
Clause
..........................................................................................119INSERT
Clause
..........................................................................................119Aggregate
Methods
..................................................................................119Pagination
using Query
.............................................................................120Hibernate
Criteria Queries
................................................... 121Restrictions
with Criteria
...........................................................................121Pagination
using
Criteria............................................................................122Sorting
the
Results....................................................................................123Projections
&
Aggregations........................................................................123Criteria
Queries Example
...........................................................................123Compilation
and Execution
........................................................................127Hibernate
Native SQL
..........................................................
128Scalar
queries...........................................................................................128Entity
queries...........................................................................................128Named
SQL
queries...................................................................................129Native
SQL Example
..................................................................................129Compilation
and Execution
........................................................................132Hibernate
Caching
...............................................................
133First-level
cache........................................................................................133Second-level
cache
...................................................................................134Query-level
cache.....................................................................................134The
Second Level Cache
............................................................................134Concurrency
strategies..............................................................................134Cache
provider
.........................................................................................135The
Query-level Cache
..............................................................................137
8. TUTORIALS POINTSimply Easy LearningHibernate Batch
Processing.................................................
138Batch Processing Example
.........................................................................139Compilation
and Execution
........................................................................142Hibernate
Interceptors..........................................................
143How to use Interceptors?
..........................................................................144Create
Interceptors...................................................................................144Create
POJO
Classes..................................................................................145Create
Database
Tables.............................................................................145Create
Mapping Configuration File
.............................................................146Create
Application Class
............................................................................146Compilation
and Execution
........................................................................148
9. TUTORIALS POINTSimply Easy LearningORM OverviewJDBC stands
for Java Database Connectivity and provides a set of Java API for
accessing the relationaldatabases from Java program. These Java
APIs enables Java programs to execute SQL statements and
interactwith any SQL compliant database.JDBC provides a flexible
architecture to write a database independent application that can
run on differentplatforms and interact with different DBMS without
any modification.Pros and Cons of JDBCPros of JDBC Cons of JDBC
Clean and simple SQL processing Good performance with large data
Very good for small applications Simple syntax so easy to learn
Complex if it is used in large projects Large programming overhead
No encapsulation Hard to implement MVC concept Query is DBMS
specificWhy Object Relational Mapping (ORM)?When we work with an
object-oriented systems, theres a mismatch between the object model
and the relationaldatabase. RDBMSs represent data in a tabular
format whereas object-oriented languages, such as Java or
C#represent it as an interconnected graph of objects. Consider the
following Java Class with proper constructors andassociated public
function:public class Employee {private int id;private String
first_name;private String last_name;private int
salary;CHAPTER1
10. TUTORIALS POINTSimply Easy Learningpublic Employee()
{}public Employee(String fname, String lname, int salary)
{this.first_name = fname;this.last_name = lname;this.salary =
salary;}public int getId() {return id;}public String getFirstName()
{return first_name;}public String getLastName() {return
last_name;}public int getSalary() {return salary;}}Consider above
objects need to be stored and retrieved into the following RDBMS
table:create table EMPLOYEE (id INT NOT NULL
auto_increment,first_name VARCHAR(20) default NULL,last_name
VARCHAR(20) default NULL,salary INT default NULL,PRIMARY KEY
(id));First problem, what if we need to modify the design of our
database after having developed few pages or ourapplication?
Second, Loading and storing objects in a relational database
exposes us to the following fivemismatch problems.Mismatch
DescriptionGranularitySometimes you will have an object model which
has more classes than thenumber of corresponding tables in the
database.InheritanceRDBMSs do not define anything similar to
Inheritance which is a natural paradigmin object-oriented
programming languages.IdentityA RDBMS defines exactly one notion of
sameness: the primary key. Java,however, defines both object
identity (a==b) and object equality
(a.equals(b)).AssociationsObject-oriented languages represent
associations using object references whereas am RDBMS represents an
association as a foreign key column.Navigation The ways you access
objects in Java and in a RDBMS are fundamentally different.The
Object-Relational Mapping (ORM) is the solution to handle all the
above impedance mismatches.What is ORM?ORM stands for
Object-Relational Mapping (ORM) is a programming technique for
converting data betweenrelational databases and object oriented
programming languages such as Java, C# etc. An ORM system
hasfollowing advantages over plain JDBC
11. TUTORIALS POINTSimply Easy LearningS.N. Advantages1 Lets
business code access objects rather than DB tables.2 Hides details
of SQL queries from OO logic.3 Based on JDBC under the hood4 No
need to deal with the database implementation.5 Entities based on
business concepts rather than database structure.6 Transaction
management and automatic key generation.7 Fast development of
application.An ORM solution consists of the following four
entities:S.N. Solutions1 An API to perform basic CRUD operations on
objects of persistent classes.2 A language or API to specify
queries that refer to classes and properties of classes.3 A
configurable facility for specifying mapping metadata.4A technique
to interact with transactional objects to perform dirty checking,
lazy associationfetching, and other optimization functions.Java ORM
FrameworksThere are several persistent frameworks and ORM options
in Java. A persistent framework is an ORM service thatstores and
retrieves objects into a relational database. Enterprise JavaBeans
Entity Beans Java Data Objects Castor TopLink Spring DAO Hibernate
And many more
12. TUTORIALS POINTSimply Easy LearningHibernate
OverviewHibernate is an Object-Relational Mapping(ORM) solution for
JAVA and it raised as an open sourcepersistent framework created by
Gavin King in 2001. It is a powerful, high performance
Object-RelationalPersistence 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 thedeveloper 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 thoseobjects 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 writingany 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. Hibernate does
not require an application server to operate. Manipulates Complex
associations of objects of your database.CHAPTER2
13. TUTORIALS POINTSimply Easy Learning Minimize database
access with smart fetching strategies. Provides Simple querying of
data.Supported DatabasesHibernate supports almost all the major
RDBMS. Following is list of few of the database engines supported
byHibernate. HSQL Database Engine DB2/NT MySQL PostgreSQL FrontBase
Oracle Microsoft SQL Server Database Sybase SQL Server Informix
Dynamic ServerSupported TechnologiesHibernate supports a variety of
other technologies, including the following: XDoclet Spring J2EE
Eclipse plug-ins Maven
14. TUTORIALS POINTSimply Easy LearningHibernate
ArchitectureThe Hibernate architecture is layered to keep you
isolated from having to know the underlying APIs.Hibernate makes
use of the database and configuration data to provide persistence
services (and persistentobjects) to the application.Following is a
very high level view of the Hibernate Application
Architecture.Following is a detailed view of the Hibernate
Application Architecture with few important core
classes.CHAPTER3
15. TUTORIALS POINTSimply Easy LearningHibernate uses various
existing Java APIs, like JDBC, Java Transaction API(JTA), and Java
Naming andDirectory Interface (JNDI). JDBC provides a rudimentary
level of abstraction of functionality common to
relationaldatabases, allowing almost any database with a JDBC
driver to be supported by Hibernate. JNDI and JTA allowHibernate to
be integrated with J2EE application servers.Following section gives
brief description of each of the class objects involved in
Hibernate ApplicationArchitecture.Configuration ObjectThe
Configuration object is the first Hibernate object you create in
any Hibernate application and usually createdonly 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. Class Mapping Setup: This component creates the
connection between the Java classes and
databasetables.SessionFactory ObjectConfiguration object is used to
create a SessionFactory object which inturn configures Hibernate
for theapplication using the supplied configuration file and allows
for a Session object to be instantiated. TheSessionFactory is a
thread safe object and used by all the threads of an
application.
16. TUTORIALS POINTSimply Easy LearningThe SessionFactory is
heavyweight object so usually it is created during application
start up and kept for lateruse. You would need one SessionFactory
object per database using a separate configuration file. So if you
areusing multiple databases then you would have to create multiple
SessionFactory objects.Session ObjectA Session is used to get a
physical connection with a database. The Session object is
lightweight and designed tobe instantiated each time an interaction
is needed with the database. Persistent objects are saved and
retrievedthrough a Session object.The session objects should not be
kept open for a long time because they are not usually thread safe
and theyshould be created and destroyed them as needed.Transaction
ObjectA Transaction represents a unit of work with the database and
most of the RDBMS supports transactionfunctionality. Transactions
in Hibernate are handled by an underlying transaction manager and
transaction (fromJDBC or JTA).This is an optional object and
Hibernate applications may choose not to use this interface,
instead managingtransactions in their own application code.Query
ObjectQuery objects use SQL or Hibernate Query Language (HQL)
string to retrieve data from the database and createobjects. A
Query instance is used to bind query parameters, limit the number
of results returned by the query, andfinally to execute the
query.Criteria ObjectCriteria object are used to create and execute
object oriented criteria queries to retrieve objects.
17. TUTORIALS POINTSimply Easy LearningHibernate
EnvironmentThis chapter will explain how to install Hibernate and
other associated packages to prepare a developenvironment for the
Hibernate applications. We will work with MySQL database to
experiment with Hibernateexamples, so make sure you already have
setup for MySQL database. For a more detail on MySQL you cancheck
our MySQL Tutorial.Downloading Hibernate:It is assumed that you
already have latest version of Java is installed on your machine.
Following are the simplesteps to download and install Hibernate on
your machine. Make a choice whether you want to install Hibernate
on Windows, or Unix and then proceed to the nextstep to download
.zip file for windows and .tz file for Unix. Download the latest
version of Hibernate from http://www.hibernate.org/downloads. At
the time of writing this tutorial I downloaded
hibernate-distribution-3.6.4.Final and when you unzipthe downloaded
file it will give you directory structure as follows.CHAPTER4
18. TUTORIALS POINTSimply Easy LearningInstalling HibernateOnce
you downloaded and unzipped the latest version of the Hibernate
Installation file, you need to performfollowing two simple steps.
Make sure you are setting your CLASSPATH variable properly
otherwise you will faceproblem while compiling your application.
Now copy all the library files from /lib into your CLASSPATH, and
change your classpath variable toinclude all the JARs: Finally copy
hibernate3.jar file into your CLASSPATH. This file lies in the root
directory of theinstallation and is the primary JAR that Hibernate
needs to do its work.Hibernate PrerequisitesFollowing is the list
of the packages/libraries required by Hibernate and you should
install them before startingwith 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/Libraries1 dom4j - XML parsing www.dom4j.org/2 Xalan -
XSLT Processor http://xml.apache.org/xalan-j/3 Xerces - The Xerces
Java Parser http://xml.apache.org/xerces-j/4 cglib - Appropriate
changes to Java classes at runtime http://cglib.sourceforge.net/5
log4j - Logging Faremwork http://logging.apache.org/log4j6 Commons
- Logging, Email etc. http://jakarta.apache.org/commons7 SLF4J -
Logging Facade for Java http://www.slf4j.org
19. TUTORIALS POINTSimply Easy LearningHibernate
ConfigurationHibernate requires to know in advance where to find
the mapping information that defines how your Javaclasses relate to
the database tables. Hibernate also requires a set of configuration
settings related to databaseand other related parameters. All such
information is usually supplied as a standard Java properties
filecalled 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
isreally required. This file is kept in the root directory of your
applications classpath.Hibernate PropertiesFollowing is the list of
important properties you would require to configure for a databases
in a standalonesituation:S.N. Properties and
Description1hibernate.dialectThis property makes Hibernate generate
the appropriate SQL for the chosen
database.2hibernate.connection.driver_classThe JDBC driver
class.3hibernate.connection.urlThe JDBC URL to the database
instance.4hibernate.connection.usernameThe database
username.5hibernate.connection.passwordThe database
password.6hibernate.connection.pool_sizeLimits the number of
connections waiting in the Hibernate database connection
pool.7hibernate.connection.autocommitAllows autocommit mode to be
used for the JDBC connection.If you are using a database along with
an application server and JNDI then you would have to configure
thefollowing properties:CHAPTER5
20. TUTORIALS POINTSimply Easy LearningS.N. Properties and
Description1hibernate.connection.datasourceThe JNDI name defined in
the application server context you are using for the
application.2hibernate.jndi.classThe InitialContext class for
JNDI.3hibernate.jndi.Passes any JNDI property you like to the JNDI
InitialContext.4hibernate.jndi.urlProvides the URL for
JNDI.5hibernate.connection.usernameThe database
username.6hibernate.connection.passwordThe database
password.Hibernate with MySQL DatabaseMySQL is one of the most
popular open-source database systems available today. Let
uscreatehibernate.cfg.xml configuration file and place it in the
root of your applications classpath. You would haveto make sure
that you have testdb database available in your MySQL database and
you have auser test available to access the database.The XML
configuration file must conform to the Hibernate 3 Configuration
DTD, which is available
fromhttp://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd.org.hibernate.dialect.MySQLDialectcom.mysql.jdbc.Driverjdbc:mysql://localhost/testrootroot123
21. TUTORIALS POINTSimply Easy LearningThe above configuration
file includes tags which are related to hibernate-mapping file and
we will seein next chapter what exactly is a hibernate mapping file
and how and why do we use it. Following is the list ofvarious
important databases dialect property type:Database Dialect
PropertyDB2 org.hibernate.dialect.DB2DialectHSQLDB
org.hibernate.dialect.HSQLDialectHypersonicSQL
org.hibernate.dialect.HSQLDialectInformix
org.hibernate.dialect.InformixDialectIngres
org.hibernate.dialect.IngresDialectInterbase
org.hibernate.dialect.InterbaseDialectMicrosoft SQL Server 2000
org.hibernate.dialect.SQLServerDialectMicrosoft SQL Server 2005
org.hibernate.dialect.SQLServer2005DialectMicrosoft SQL Server 2008
org.hibernate.dialect.SQLServer2008DialectMySQL
org.hibernate.dialect.MySQLDialectOracle (any version)
org.hibernate.dialect.OracleDialectOracle 11g
org.hibernate.dialect.Oracle10gDialectOracle 10g
org.hibernate.dialect.Oracle10gDialectOracle 9i
org.hibernate.dialect.Oracle9iDialectPostgreSQL
org.hibernate.dialect.PostgreSQLDialectProgress
org.hibernate.dialect.ProgressDialectSAP DB
org.hibernate.dialect.SAPDBDialectSybase
org.hibernate.dialect.SybaseDialectSybase Anywhere
org.hibernate.dialect.SybaseAnywhereDialectSerial No Class Name
Functionality1 Assert A set of assert methods.2 TestCase A test
case defines the fixture to run multiple tests.3 TestResultA
TestResult collects the results of executing atest case.4 TestSuite
A TestSuite is a Composite of Tests.
22. TUTORIALS POINTSimply Easy LearningHibernate
SessionsASession is used to get a physical connection with a
database. The Session object is lightweight anddesigned to be
instantiated each time an interaction is needed with the database.
Persistent objects are savedand 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 theyshould be created
and destroyed them as needed. The main function of the Session is
to offer create, read anddelete operations for instances of mapped
entity classes. Instances may exist in one of the following three
statesat a given point in time: transient: A new instance of a a
persistent class which is not associated with a Session and has
norepresentation in the database and no identifier value is
considered transient by Hibernate. persistent: You can make a
transient instance persistent by associating it with a Session. A
persistentinstance has a representation in the database, an
identifier value and is associated with a Session. detached: Once
we close the Hibernate Session, the persistent instance will become
a detachedinstance.A Session instance is serializable if its
persistent classes are serializable. A typical transaction should
use thefollowing idiom:Session session =
factory.openSession();Transaction tx = null;try {tx =
session.beginTransaction();// do some work...tx.commit();}catch
(Exception e) {if (tx!=null)
tx.rollback();e.printStackTrace();}finally {session.close();}If the
Session throws an exception, the transaction must be rolled back
and the session must be discarded.CHAPTER6
23. TUTORIALS POINTSimply Easy LearningSession Interface
MethodsThere are number of methods provided by the Session
interface but Im going to list down few important methodsonly,
which we will use in this tutorial. You can check Hibernate
documentation for a complete list of methodsassociated with Session
and SessionFactory.S.N. Session Methods and Description1Transaction
beginTransaction()Begin a unit of work and return the associated
Transaction object.2void cancelQuery()Cancel the execution of the
current query.3void clear()Completely clear the session.4Connection
close()End the session by releasing the JDBC connection and
cleaning up.5Criteria createCriteria(Class persistentClass)Create a
new Criteria instance, for the given entity class, or a superclass
of an entity class.6Criteria createCriteria(String
entityName)Create a new Criteria instance, for the given entity
name.7Serializable getIdentifier(Object object)Return the
identifier value of the given entity as associated with this
session.8Query createFilter(Object collection, String
queryString)Create a new instance of Query for the given collection
and filter string.9Query createQuery(String queryString)Create a
new instance of Query for the given HQL query string.10SQLQuery
createSQLQuery(String queryString)Create a new instance of SQLQuery
for the given SQL query string.11void delete(Object object)Remove a
persistent instance from the datastore.12void delete(String
entityName, Object object)Remove a persistent instance from the
datastore.13Session get(String entityName, Serializable id)Return
the persistent instance of the given named entity with the given
identifier, or null ifthere is no such persistent
instance.14SessionFactory getSessionFactory()Get the session
factory which created this session.15void refresh(Object
object)Re-read the state of the given instance from the underlying
database.16Transaction getTransaction()Get the Transaction instance
associated with this session.17boolean isConnected()Check if the
session is currently connected.18boolean isDirty()Does this session
contain any changes which must be synchronized with the
database?
24. TUTORIALS POINTSimply Easy Learning19boolean isOpen()Check
if the session is still open.20Serializable save(Object
object)Persist the given transient instance, first assigning a
generated identifier.21void saveOrUpdate(Object object)Either
save(Object) or update(Object) the given instance.22void
update(Object object)Update the persistent instance with the
identifier of the given detached instance.23void update(String
entityName, Object object)Update the persistent instance with the
identifier of the given detached instance.
25. TUTORIALS POINTSimply Easy LearningHibernate Persistent
ClassThe entire concept of Hibernate is to take the values from
Java class attributes and persist them to adatabase table. A
mapping document helps Hibernate in determining how to pull the
values from the classes andmap them with table and associated
fields.Java classes whose objects or instances will be stored in
database tables are called persistent classes inHibernate.
Hibernate works best if these classes follow some simple rules,
also known as the Plain Old JavaObject (POJO) programming model.
There are following main rules of persistent classes, however, none
of theserules are hard requirements. All Java classes that will be
persisted need a default constructor. All classes should contain an
ID in order to allow easy identification of your objects within
Hibernate andthe database. This property maps to the primary key
column of a database table. All attributes that will be persisted
should be declared private and have getXXX and setXXXmethodsdefined
in the JavaBean style. A central feature of Hibernate, proxies,
depends upon the persistent class being either non-final, or
theimplementation of an interface that declares all public methods.
All classes that do not extend or implement some specialized
classes and interfaces required by the EJBframework.The POJO name
is used to emphasize that a given object is an ordinary Java
Object, not a special object, and inparticular not an Enterprise
JavaBean.A simple POJO example:Based on the few rules mentioned
above we can define a POJO class as follows:public class Employee
{private int id;private String firstName;private String
lastName;private int salary;public Employee() {}CHAPTER7
27. TUTORIALS POINTSimply Easy LearningHibernate Mapping
FilesAn Object/relational mappings are usually defined in an XML
document. This mapping file instructsHibernate how to map the
defined class or classes to the database tables.Though many
Hibernate users choose to write the XML by hand, a number of tools
exist to generate the mappingdocument. These include XDoclet,
Middlegen and AndroMDA for advanced Hibernate users.Let us consider
our previously defined POJO class whose objects will persist in the
table defined in next section.public class Employee {private int
id;private String firstName;private String lastName;private int
salary;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;}CHAPTER8
28. TUTORIALS POINTSimply Easy Learningpublic void setSalary(
int salary ) {this.salary = salary;}}There would be one table
corresponding to each object you are willing to provide
persistence. Consider aboveobjects need to be stored and retrieved
into the following RDBMS table:create table EMPLOYEE (id INT NOT
NULL auto_increment,first_name VARCHAR(20) default NULL,last_name
VARCHAR(20) default NULL,salary INT default NULL,PRIMARY KEY
(id));Based on the two above entities we can define following
mapping file which instructs Hibernate how to map thedefined class
or classes to the database tables.This class contains the employee
detail.You should save the mapping document in a file with the
format .hbm.xml. We saved our mappingdocument in the file
Employee.hbm.xml. Let us see little detail about the mapping
elements used in the mappingfile: The mapping document is an XML
document having as the root element whichcontains all the elements.
The 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
tablename is specified using the table attribute. The element is
optional element and can be used to create the class description.
The 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
tothe column in the database table. The type attribute holds the
hibernate mapping type, this mappingtypes will convert from Java to
SQL data type. The element within the id element is used to
automatically generate the primary keyvalues. Set the class
attribute of the generator element is set to native to let
hibernate pick up
29. TUTORIALS POINTSimply Easy Learningeither identity,
sequence or hilo algorithm to create primary key depending upon the
capabilities of theunderlying database. The 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 tothe column in the database table. The
type attribute holds the hibernate mapping type, this mappingtypes
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 tocover as many as possible while discussing other
Hibernate related topics.
30. TUTORIALS POINTSimply Easy LearningHibernate Mapping
TypesWhen you prepare a Hibernate mapping document, we have seen
that you map Java data types intoRDBMS data types. The types
declared and used in the mapping files are not Java data types;
they are not SQLdatabase types either. These types are called
Hibernate mapping types, which can translate from Java to SQLdata
types and vice versa.This chapter lists down all the basic, date
and time, large object, and various other built-in mapping
types.Primitive typesMapping type Java type ANSI SQL Typeinteger
int or java.lang.Integer INTEGERlong long or java.lang.Long
BIGINTshort short or java.lang.Short SMALLINTfloat float or
java.lang.Float FLOATdouble double or java.lang.Double
DOUBLEbig_decimal java.math.BigDecimal NUMERICcharacter
java.lang.String CHAR(1)string java.lang.String VARCHARbyte byte or
java.lang.Byte TINYINTboolean boolean or java.lang.Boolean
BITyes/no boolean or java.lang.BooleanCHAR(1) (Y orN)true/false
boolean or java.lang.BooleanCHAR(1) (T orF)Date and time
typesMapping type Java type ANSI SQL Type.CHAPTER9
31. TUTORIALS POINTSimply Easy Learningdate java.util.Date or
java.sql.Date DATEtime java.util.Date or java.sql.Time
TIMEtimestamp java.util.Date or java.sql.Timestamp
TIMESTAMPcalendar java.util.Calendar TIMESTAMPcalendar_date
java.util.Calendar DATEBinary and large object typesMapping type
Java type ANSI SQL Typebinary byte[]VARBINARY (orBLOB)text
java.lang.String CLOBserializable any Java class that implements
java.io.SerializableVARBINARY (orBLOB)clob java.sql.Clob CLOBblob
java.sql.Blob BLOBJDK-related typesMapping type Java type ANSI SQL
Typeclass java.lang.Class VARCHARlocale java.util.Locale
VARCHARtimezone java.util.TimeZone VARCHARcurrency
java.util.Currency VARCHAR
32. TUTORIALS POINTSimply Easy LearningHibernate ExamplesLet us
try an example of using Hibernate to provide Java persistence in a
standalone application. We willgo through different steps involved
in creating Java Application using Hibernate technology.Create POJO
ClassesThe first step in creating an application is to build the
Java POJO class or classes, depending on the applicationthat will
be persisted to the database. Let us consider our Employee class
with getXXX andsetXXX methods tomake it JavaBeans compliant class.A
POJO (Plain Old Java Object) is a Java object that doesnt extend or
implement some specialized classes andinterfaces respectively
required by the EJB framework. All normal Java objects are
POJO.When you design a classs to be persisted by Hibernate, its
important to provide JavaBeans compliant code aswell as one
attribute which would work as index like id attribute in the
Employee class.public class Employee {private int id;private String
firstName;private String lastName;private int salary;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()
{CHAPTER10
33. TUTORIALS POINTSimply Easy Learningreturn lastName;}public
void setLastName( String last_name ) {this.lastName =
last_name;}public int getSalary() {return salary;}public void
setSalary( int salary ) {this.salary = salary;}}Create Database
TablesSecond step would be creating tables in your database. There
would be one table corresponding to each objectyou are willing to
provide persistence. Consider above objects need to be stored and
retrieved into the followingRDBMS table:create table EMPLOYEE (id
INT NOT NULL auto_increment,first_name VARCHAR(20) default
NULL,last_name VARCHAR(20) default NULL,salary INT default
NULL,PRIMARY KEY (id));Create Mapping Configuration FileThis step
is to create a mapping file that instructs Hibernate how to map the
defined class or classes to thedatabase tables.This class contains
the employee detail.You should save the mapping document in a file
with the format .hbm.xml. We saved our mappingdocument in the file
Employee.hbm.xml. Let us see little detail about the mapping
document: The mapping document is an XML document having as the
root element whichcontains all the elements.
34. TUTORIALS POINTSimply Easy Learning The 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 tablename is specified using the
table attribute. The element is optional element and can be used to
create the class description. The 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 tothe column in the database
table. The type attribute holds the hibernate mapping type, this
mappingtypes will convert from Java to SQL data type. The element
within the id element is used to automatically generate the primary
keyvalues. Set the class attribute of the generator element is set
to native to let hibernate pick upeither identity, sequence or hilo
algorithm to create primary key depending upon the capabilities of
theunderlying database. The 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 tothe column in the database table. The type
attribute holds the hibernate mapping type, this mappingtypes 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 tocover as many as possible while discussing other
Hibernate related topics.Create Application ClassFinally, we will
create our application class with the main() method to run the
application. We will use thisapplication to save few Employees
records and then we will apply CRUD operations on those
records.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;public class ManageEmployee
{private static SessionFactory factory;public static void
main(String[] args) {try{factory = new
Configuration().configure().buildSessionFactory();}catch (Throwable
ex) {System.err.println("Failed to create sessionFactory object." +
ex);throw new ExceptionInInitializerError(ex);}ManageEmployee ME =
new ManageEmployee();/* Add few employee records in database
*/Integer empID1 = ME.addEmployee("Zara", "Ali", 1000);Integer
empID2 = ME.addEmployee("Daisy", "Das", 5000);Integer empID3 =
ME.addEmployee("John", "Paul", 10000);/* List down all the
employees */ME.listEmployees();/* Update employees records
*/ME.updateEmployee(empID1, 5000);
35. TUTORIALS POINTSimply Easy Learning/* Delete an employee
from the database */ME.deleteEmployee(empID2);/* List down new list
of the employees */ME.listEmployees();}/* Method to CREATE an
employee in the database */public Integer addEmployee(String fname,
String lname, int salary){Session session =
factory.openSession();Transaction tx = null;Integer employeeID =
null;try{tx = session.beginTransaction();Employee employee = new
Employee(fname, lname, salary);employeeID = (Integer)
session.save(employee);tx.commit();}catch (HibernateException e)
{if (tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}return employeeID;}/* Method to READ all the
employees */public void listEmployees( ){Session session =
factory.openSession();Transaction tx = null;try{tx =
session.beginTransaction();List employees =
session.createQuery("FROM Employee").list();for (Iterator iterator
=employees.iterator(); iterator.hasNext();){Employee employee =
(Employee) iterator.next();System.out.print("First Name: " +
employee.getFirstName());System.out.print(" Last Name: " +
employee.getLastName());System.out.println(" Salary: " +
employee.getSalary());}tx.commit();}catch (HibernateException e)
{if (tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}}/* Method to UPDATE salary for an employee
*/public void updateEmployee(Integer EmployeeID, int salary
){Session session = factory.openSession();Transaction tx =
null;try{tx = session.beginTransaction();Employee employee
=(Employee)session.get(Employee.class,
EmployeeID);employee.setSalary( salary
);session.update(employee);tx.commit();}catch (HibernateException
e) {if (tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}}/* Method to DELETE an employee from the records
*/public void deleteEmployee(Integer EmployeeID){Session session =
factory.openSession();Transaction tx = null;
36. TUTORIALS POINTSimply Easy Learningtry{tx =
session.beginTransaction();Employee employee
=(Employee)session.get(Employee.class,
EmployeeID);session.delete(employee);tx.commit();}catch
(HibernateException e) {if (tx!=null)
tx.rollback();e.printStackTrace();}finally
{session.close();}}}Compilation and ExecutionHere are the steps to
compile and run the above mentioned application. Make sure you have
set PATH andCLASSPATH appropriately before proceeding for the
compilation and execution. Create hibernate.cfg.xml configuration
file as explained in configuration chapter. Create Employee.hbm.xml
mapping file as shown above. Create Employee.java source file as
shown above and compile it. Create ManageEmployee.java source file
as shown above and compile it. Execute ManageEmployee binary to run
the program.You would get following result, and records would be
created in EMPLOYEE table.$java ManageEmployee.......VARIOUS LOG
MESSAGES WILL DISPLAY HERE........First Name: Zara Last Name: Ali
Salary: 1000First Name: Daisy Last Name: Das Salary: 5000First
Name: John Last Name: Paul Salary: 10000First Name: Zara Last Name:
Ali Salary: 5000First Name: John Last Name: Paul Salary: 10000If
you check your EMPLOYEE table, it should have following
records:mysql> select * from
EMPLOYEE;+----+------------+-----------+--------+| id | first_name
| last_name | salary |+----+------------+-----------+--------+| 29
| Zara | Ali | 5000 || 31 | John | Paul | 10000
|+----+------------+-----------+--------+2 rows in set (0.00
secmysql>
37. TUTORIALS POINTSimply Easy LearningHibernate O/R MappingSo
far we have seen very basic O/R mapping using hibernate but there
are three most important mappingtopics which we have to learn in
detail. These are the mapping of collections, the mapping of
associationsbetween entity classes and Component
Mappings.Collections MappingsIf an entity or class has collection
of values for a particular variable, then we can map those values
using any oneof the collection interfaces available in java.
Hibernate can persist instances ofjava.util.Map,
java.util.Set,java.util.SortedMap, java.util.SortedSet,
java.util.List, and any array of persistent entities or
values.Collection type Mapping and Descriptionjava.util.Set This is
mapped with a element and initialized with
java.util.HashSetjava.util.SortedSetThis is mapped with a element
and initialized with java.util.TreeSet.The sort attribute can be
set to either a comparator or natural ordering.java.util.List This
is mapped with a element and initialized with
java.util.ArrayListjava.util.CollectionThis is mapped with a or
element and initialized withjava.util.ArrayListjava.util.MapThis is
mapped with a element and initialized
withjava.util.HashMapjava.util.SortedMapThis is mapped with a
element and initialized withjava.util.TreeMap. The sort attribute
can be set to either a comparator ornatural ordering.Arrays are
supported by Hibernate with for Java primitive value types and for
everythingelse. However, they are rarely used so Im not going to
discuss them in this tutorial.If you want to map a user defined
collection interfaces which is not directly supported by Hibernate,
you need totell Hibernate about the semantics of your custom
collections which is not very easy and not recommend to
beused.Hibernate Set MappingsA Set is a java collection that does
not contain any duplicate element. More formally, sets contain no
pair ofelements e1 and e2 such that e1.equals(e2), and at most one
null element. So objects to be added to a set mustCHAPTER11
38. TUTORIALS POINTSimply Easy Learningimplement both the
equals() and hashCode() methods so that Java can determine whether
any twoelements/objects are identical.A Set is mapped with a
element in the mapping table and initialized with
java.util.HashSet. You can use Setcollection in your class when
there is no duplicate element required in the collection.Define
RDBMS TablesConsider a situation where we need to store our
employee records in EMPLOYEE table which will have
followingstructure:create table EMPLOYEE (id INT NOT NULL
auto_increment,first_name VARCHAR(20) default NULL,last_name
VARCHAR(20) default NULL,salary INT default NULL,PRIMARY KEY
(id));Further, assume each employee can have one or more
certificate associated with him/her. So we will storecertificate
related information in a separate table which has following
structure:create table CERTIFICATE (id INT NOT NULL
auto_increment,certificate_name VARCHAR(30) default
NULL,employee_id INT default NULL,PRIMARY KEY (id));There will be
one-to-many relationship between EMPLOYEE and CERTIFICATE
objects:Define POJO ClassesLet us implement our POJO class Employee
which will be used to persist the objects related to EMPLOYEE
tableand having a collection of certificates in Set variable.import
java.util.*;public class Employee {private int id;private String
firstName;private String lastName;private int salary;private Set
certificates;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()
{
39. TUTORIALS POINTSimply Easy Learningreturn 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;}public Set
getCertificates() {return certificates;}public void
setCertificates( Set certificates ) {this.certificates =
certificates;}}Now let us define another POJO class corresponding
to CERTIFICATE table so that certificate objects can bestored and
retrieved into the CERTIFICATE table. This class should also
implement both the equals() andhashCode() methods so that Java can
determine whether any two elements/objects are identical.public
class Certificate {private int id;private String name;public
Certificate() {}public Certificate(String name) {this.name =
name;}public int getId() {return id;}public void setId( int id )
{this.id = id;}public String getName() {return name;}public void
setName( String name ) {this.name = name;}public boolean
equals(Object obj) {if (obj == null) return false;if
(!this.getClass().equals(obj.getClass())) return false;Certificate
obj2 = (Certificate)obj;if((this.id == obj2.getId()) &&
(this.name.equals(obj2.getName()))){return true;}return
false;}public int hashCode() {int tmp = 0;tmp = ( id + name
).hashCode();
40. TUTORIALS POINTSimply Easy Learningreturn tmp;}}Define
Hibernate Mapping FileLet us develop our mapping file which
instructs Hibernate how to map the defined classes to the database
tables.The element will be used to define the rule for Set
collection used.This class contains the employee detail.This class
contains the certificate records.You should save the mapping
document in a file with the format .hbm.xml. We saved our
mappingdocument in the file Employee.hbm.xml. You are already
familiar with most of the mapping detail but let us see allthe
elements of mapping file once again: The mapping document is an XML
document having as the root element whichcontains two elements
corresponding to each class. The elements are used to define
specific mappings from a Java classes to the database tables.
TheJava class name is specified using the name attribute of the
class element and the database table name isspecified using the
table attribute. The element is optional element and can be used to
create the class description. The 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 thecolumn in the database
table. The type attribute holds the hibernate mapping type, this
mapping types willconvert from Java to SQL data type. The element
within the id element is used to automatically generate the primary
key values. Setthe 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.
41. TUTORIALS POINTSimply Easy Learning The 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 thecolumn in the database table.
The type attribute holds the hibernate mapping type, this mapping
types willconvert from Java to SQL data type. The element is new
here and has been introduced to set the relationship between
Certificate andEmployee classes. We used the cascade attribute in
the element to tell Hibernate to persist theCertificate objects at
the same time as the Employee objects. The nameattribute is set to
thedefined Set variable in the parent class, in our case it is
certificates. For each set variable, we need to define aseparate
set element in the mapping file. The element is the column in the
CERTIFICATE table that holds the foreign key to the parent object
ie.table EMPLOYEE. The element indicates that one Employee object
relates to many Certificate objects and, assuch, the Certificate
object must have a Employee parent associated with it. You can use
either , or elements based on your requirement.Create Application
ClassFinally, we will create our application class with the main()
method to run the application. We will use thisapplication to save
few Employees records alongwith their certificates and then we will
apply CRUD operationson those records.import java.util.*;import
org.hibernate.HibernateException;import
org.hibernate.Session;import org.hibernate.Transaction;import
org.hibernate.SessionFactory;import
org.hibernate.cfg.Configuration;public class ManageEmployee
{private static SessionFactory factory;public static void
main(String[] args) {try{factory = new
Configuration().configure().buildSessionFactory();}catch (Throwable
ex) {System.err.println("Failed to create sessionFactory object." +
ex);throw new ExceptionInInitializerError(ex);}ManageEmployee ME =
new ManageEmployee();/* Let us have a set of certificates for the
first employee */HashSet set1 = new HashSet();set1.add(new
Certificate("MCA"));set1.add(new Certificate("MBA"));set1.add(new
Certificate("PMP"));/* Add employee records in the database
*/Integer empID1 = ME.addEmployee("Manoj", "Kumar", 4000, set1);/*
Another set of certificates for the second employee */HashSet set2
= new HashSet();set2.add(new Certificate("BCA"));set2.add(new
Certificate("BA"));/* Add another employee record in the database
*/Integer empID2 = ME.addEmployee("Dilip", "Kumar", 3000, set2);/*
List down all the employees */ME.listEmployees();/* Update
employees salary records */ME.updateEmployee(empID1, 5000);/*
Delete an employee from the database */
42. TUTORIALS POINTSimply Easy
LearningME.deleteEmployee(empID2);/* List down all the employees
*/ME.listEmployees();}/* Method to add an employee record in the
database */public Integer addEmployee(String fname, String
lname,int salary, Set cert){Session session =
factory.openSession();Transaction tx = null;Integer employeeID =
null;try{tx = session.beginTransaction();Employee employee = new
Employee(fname, lname,
salary);employee.setCertificates(cert);employeeID = (Integer)
session.save(employee);tx.commit();}catch (HibernateException e)
{if (tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}return employeeID;}/* Method to list all the
employees detail */public void listEmployees( ){Session session =
factory.openSession();Transaction tx = null;try{tx =
session.beginTransaction();List employees =
session.createQuery("FROM Employee").list();for (Iterator iterator1
=employees.iterator(); iterator1.hasNext();){Employee employee =
(Employee) iterator1.next();System.out.print("First Name: " +
employee.getFirstName());System.out.print(" Last Name: " +
employee.getLastName());System.out.println(" Salary: " +
employee.getSalary());Set certificates =
employee.getCertificates();for (Iterator iterator2
=certificates.iterator(); iterator2.hasNext();){Certificate
certName = (Certificate)
iterator2.next();System.out.println("Certificate: " +
certName.getName());}}tx.commit();}catch (HibernateException e) {if
(tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}}/* Method to update salary for an employee
*/public void updateEmployee(Integer EmployeeID, int salary
){Session session = factory.openSession();Transaction tx =
null;try{tx = session.beginTransaction();Employee employee
=(Employee)session.get(Employee.class,
EmployeeID);employee.setSalary( salary
);session.update(employee);tx.commit();}catch (HibernateException
e) {
43. TUTORIALS POINTSimply Easy Learningif (tx!=null)
tx.rollback();e.printStackTrace();}finally {session.close();}}/*
Method to delete an employee from the records */public void
deleteEmployee(Integer EmployeeID){Session session =
factory.openSession();Transaction tx = null;try{tx =
session.beginTransaction();Employee employee
=(Employee)session.get(Employee.class,
EmployeeID);session.delete(employee);tx.commit();}catch
(HibernateException e) {if (tx!=null)
tx.rollback();e.printStackTrace();}finally
{session.close();}}}Compilation and ExecutionHere are the steps to
compile and run the above mentioned application. Make sure you have
set PATH andCLASSPATH appropriately before proceeding for the
compilation and execution. Create hibernate.cfg.xml configuration
file as explained in configuration chapter. Create Employee.hbm.xml
mapping file as shown above. Create Employee.java source file as
shown above and compile it. Create Certificate.java source file as
shown above and compile it. Create ManageEmployee.java source file
as shown above and compile it. Execute ManageEmployee binary to run
the program.You would get following result on the screen, and same
time records would be created in EMPLOYEE andCERTIFICATE
tables.$java ManageEmployee.......VARIOUS LOG MESSAGES WILL DISPLAY
HERE........First Name: Manoj Last Name: Kumar Salary:
4000Certificate: MBACertificate: PMPCertificate: MCAFirst Name:
Dilip Last Name: Kumar Salary: 3000Certificate: BCACertificate:
BAFirst Name: Manoj Last Name: Kumar Salary: 5000Certificate:
MBACertificate: PMP
44. TUTORIALS POINTSimply Easy LearningCertificate: MCAIf you
check your EMPLOYEE and CERTIFICATE tables, they should have
following records:mysql> select * from
employee;+----+------------+-----------+--------+| id | first_name
| last_name | salary |+----+------------+-----------+--------+| 1 |
Manoj | Kumar | 5000 |+----+------------+-----------+--------+1 row
in set (0.00 sec)mysql> select * from
certificate;+----+------------------+-------------+| id |
certificate_name | employee_id
|+----+------------------+-------------+| 1 | MBA | 1 || 2 | PMP |
1 || 3 | MCA | 1 |+----+------------------+-------------+3 rows in
set (0.00 sec)mysql>Hibernate SortedSet MappingsA SortedSet is a
java collection that does not contain any duplicate element and
elements are ordered using theirnatural ordering or by a comparator
provided.A SortedSet is mapped with a element in the mapping table
and initialized with java.util.TreeSet.The sort attribute can be
set to either a comparator or natural ordering. If we use natural
ordering then its iteratorwill traverse the set in ascending
element order.Define RDBMS TablesConsider a situation where we need
to store our employee records in EMPLOYEE table which will have
followingstructure:create table EMPLOYEE (id INT NOT NULL
auto_increment,first_name VARCHAR(20) default NULL,last_name
VARCHAR(20) default NULL,salary INT default NULL,PRIMARY KEY
(id));Further, assume each employee can have one or more
certificate associated with him/her. So we will storecertificate
related information in a separate table which has following
structure:create table CERTIFICATE (id INT NOT NULL
auto_increment,certificate_name VARCHAR(30) default
NULL,employee_id INT default NULL,PRIMARY KEY (id));There will be
one-to-many relationship between EMPLOYEE and CERTIFICATE
objects:
45. TUTORIALS POINTSimply Easy LearningDefine POJO ClassesLet
us implement our POJO class Employee which will be used to persist
the objects related to EMPLOYEE tableand having a collection of
certificates in SortedSet variable.import java.util.*;public class
Employee {private int id;private String firstName;private String
lastName;private int salary;private SortedSet certificates;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;}public SortedSet getCertificates() {return
certificates;}public void setCertificates( SortedSet certificates )
{this.certificates = certificates;}}Now let us define another POJO
class corresponding to CERTIFICATE table so that certificate
objects can bestored and retrieved into the CERTIFICATE table. This
class should also implementComparable interfaceand compareTo method
which will be used to sort the elements in case you
setsort="natural" in your mappingfile (see below mapping
file).public class Certificate implements Comparable {
46. TUTORIALS POINTSimply Easy Learningprivate int id;private
String name;public Certificate() {}public Certificate(String name)
{this.name = name;}public int getId() {return id;}public void
setId( int id ) {this.id = id;}public String getName() {return
name;}public void setName( String name ) {this.name = name;}public
int compareTo(Certificate that){final int BEFORE = -1;final int
AFTER = 1;if (that == null) {return BEFORE;}Comparable
thisCertificate = this.getName();Comparable thatCertificate =
that.getName();if(thisCertificate == null) {return AFTER;} else
if(thatCertificate == null) {return BEFORE;} else {return
thisCertificate.compareTo(thatCertificate);}}}Define Hibernate
Mapping FileLet us develop our mapping file which instructs
Hibernate how to map the defined classes to the database tables.The
element will be used to define the rule for SortedSet collection
used.This class contains the employee detail.
47. TUTORIALS POINTSimply Easy LearningThis class contains the
certificate records.You should save the mapping document in a file
with the format .hbm.xml. We saved our mappingdocument in the file
Employee.hbm.xml. You are already familiar with most of the mapping
detail but let us see allthe elements of mapping file once again:
The mapping document is an XML document having as the root element
whichcontains two elements corresponding to each class. The
elements are used to define specific mappings from a Java classes
to the database tables. TheJava class name is specified using the
name attribute of the class element and the database table name
isspecified using the table attribute. The element is optional
element and can be used to create the class description. The
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
thecolumn in the database table. The type attribute holds the
hibernate mapping type, this mapping types willconvert from Java to
SQL data type. The element within the id element is used to
automatically generate the primary key values. Setthe 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
underlyingdatabase. The 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 thecolumn in the database table. The type
attribute holds the hibernate mapping type, this mapping types
willconvert from Java to SQL data type. The element is used to set
the relationship between Certificate and Employee classes. We
usedthe cascade attribute in the element to tell Hibernate to
persist the Certificate objects at the same timeas the Employee
objects. The name attribute is set to the definedSortedSet variable
in the parent class, inour case it is certificates. The sort
attribute can be set to natural to have natural sorting or it can
be set to acustom class implementingjava.util.Comparator. We have
used a class MyClass which implementsjava.util.Comparator to
reverse the sorting order implemented in Certificate class. The
element is the column in the CERTIFICATE table that holds the
foreign key to the parent objectie. table EMPLOYEE. The element
indicates that one Employee object relates to many Certificate
objects and, assuch, the Certificate object must have a Employee
parent associated with it. You can use either , or elements based
on your requirement.If we use sort="natural" setting then we do not
need to create a separate class because Certificate class
alreadyhas implemented Comparable interface and hibernate will use
compareTo() method defined in Certificate class tocompare
certificate names. But we are using a custom comparator
classMyClass in our mapping file so we wouldhave to create this
class based on our sorting algorithm. Let us do descending sorting
in this class using thisclass.import java.util.Comparator;
48. TUTORIALS POINTSimply Easy Learningpublic class MyClass
implements Comparator{public int compare(Certificate o1,
Certificate o2) {final int BEFORE = -1;final int AFTER = 1;/* To
reverse the sorting order, multiple by -1 */if (o2 == null) {return
BEFORE * -1;}Comparable thisCertificate = o1.getName();Comparable
thatCertificate = o2.getName();if(thisCertificate == null) {return
AFTER * 1;} else if(thatCertificate == null) {return BEFORE * -1;}
else {return thisCertificate.compareTo(thatCertificate) *
-1;}}}Create Application ClassFinally, we will create our
application class with the main() method to run the application. We
will use thisapplication to save few Employees records alongwith
their certificates and then we will apply CRUD operationson those
records.import java.util.*;import
org.hibernate.HibernateException;import
org.hibernate.Session;import org.hibernate.Transaction;import
org.hibernate.SessionFactory;import
org.hibernate.cfg.Configuration;public class ManageEmployee
{private static SessionFactory factory;public static void
main(String[] args) {try{factory = new
Configuration().configure().buildSessionFactory();}catch (Throwable
ex) {System.err.println("Failed to create sessionFactory object." +
ex);throw new ExceptionInInitializerError(ex);}ManageEmployee ME =
new ManageEmployee();/* Let us have a set of certificates for the
first employee */TreeSet set1 = new TreeSet();set1.add(new
Certificate("MCA"));set1.add(new Certificate("MBA"));set1.add(new
Certificate("PMP"));/* Add employee records in the database
*/Integer empID1 = ME.addEmployee("Manoj", "Kumar", 4000, set1);/*
Another set of certificates for the second employee */TreeSet set2
= new TreeSet();set2.add(new Certificate("BCA"));set2.add(new
Certificate("BA"));/* Add another employee record in the database
*/Integer empID2 = ME.addEmployee("Dilip", "Kumar", 3000,
set2);
49. TUTORIALS POINTSimply Easy Learning/* List down all the
employees */ME.listEmployees();/* Update employees salary records
*/ME.updateEmployee(empID1, 5000);/* Delete an employee from the
database */ME.deleteEmployee(empID2);/* List down all the employees
*/ME.listEmployees();}/* Method to add an employee record in the
database */public Integer addEmployee(String fname, String
lname,int salary, SortedSet cert){Session session =
factory.openSession();Transaction tx = null;Integer employeeID =
null;try{tx = session.beginTransaction();Employee employee = new
Employee(fname, lname,
salary);employee.setCertificates(cert);employeeID = (Integer)
session.save(employee);tx.commit();}catch (HibernateException e)
{if (tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}return employeeID;}/* Method to list all the
employees detail */public void listEmployees( ){Session session =
factory.openSession();Transaction tx = null;try{tx =
session.beginTransaction();List employees =
session.createQuery("FROM Employee").list();for (Iterator iterator1
=employees.iterator(); iterator1.hasNext();){Employee employee =
(Employee) iterator1.next();System.out.print("First Name: " +
employee.getFirstName());System.out.print(" Last Name: " +
employee.getLastName());System.out.println(" Salary: " +
employee.getSalary());SortedSet certificates =
employee.getCertificates();for (Iterator iterator2
=certificates.iterator(); iterator2.hasNext();){Certificate
certName = (Certificate)
iterator2.next();System.out.println("Certificate: " +
certName.getName());}}tx.commit();}catch (HibernateException e) {if
(tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}}/* Method to update salary for an employee
*/public void updateEmployee(Integer EmployeeID, int salary
){Session session = factory.openSession();Transaction tx =
null;try{
50. TUTORIALS POINTSimply Easy Learningtx =
session.beginTransaction();Employee employee
=(Employee)session.get(Employee.class,
EmployeeID);employee.setSalary( salary
);session.update(employee);tx.commit();}catch (HibernateException
e) {if (tx!=null) tx.rollback();e.printStackTrace();}finally
{session.close();}}/* Method to delete an employee from the records
*/public void deleteEmployee(Integer EmployeeID){Session session =
factory.openSession();Transaction tx = null;try{tx =
session.beginTransaction();Employee employee
=(Employee)session.get(Employee.class,
EmployeeID);session.delete(employee);tx.commit();}catch
(HibernateException e) {if (tx!=null)
tx.rollback();e.printStackTrace();}finally
{session.close();}}}Compilation and ExecutionHere are the steps to
compile and run the above mentioned application. Make sure you have
set PATH andCLASSPATH appropriately before proceeding for the
compilation and execution. Create hibernate.cfg.xml configuration
file as explained in configuration chapter. Create Employee.hbm.xml
mapping file as shown above. Create Employee.java source file as
shown above and compile it. Create Certificate.java source file as
shown above and compile it. Create MyClass.java source file as
shown above and compile it. Create ManageEmployee.java source file
as shown above and compile it. Execute ManageEmployee binary to run
the program.You would get following result on the screen, and same
time records would be created in EMPLOYEE andCERTIFICATE tables.
You can see certificates has been sorted in reverse order. You can
try by changing yourmapping file, simply set sort="natural" and
execute your program and compare the results.$java
ManageEmployee.......VARIOUS LOG MESSAGES WILL DISPLAY
HERE........First Name: Manoj Last Name: Kumar Salary:
4000Certificate: PMPCertificate: MCA
51. TUTORIALS POINTSimply Easy LearningCertificate: MBAFirst
Name: Dilip Last Name: Kumar Salary: 3000Certificate:
BCACertificate: BAFirst Name: Manoj Last Name: Kumar Salary:
5000Certificate: PMPCertificate: MCACertificate: MBAIf you check
your EMPLOYEE and CERTIFICATE tables, they should have following
records:mysql> select * from
employee;+----+------------+-----------+--------+| id | first_name
| last_name | salary |+----+------------+-----------+--------+| 1 |
Manoj | Kumar | 5000 |+----+------------+-----------+--------+1 row
in set (0.00 sec)mysql> select * from
certificate;+----+------------------+-------------+| id |
certificate_name | employee_id
|+----+------------------+-------------+| 1 | MBA | 1 || 2 | PMP |
1 || 3 | MCA | 1 |+----+------------------+-------------+3 rows in
set (0.00 sec)mysql>Hibernate List MappingsA List is a java
collection that stores elements in sequence and allow duplicate
elements. The user of thisinterface has precise control over where
in the list each element is inserted. The user can access elements
bytheir integer index, and search for elements in the list. More
formally, lists typically allow pairs of elements e1 ande2 such
that e1.equals(e2), and they typically allow multiple null elements
if they allow null elements at all.A List is mapped with a element
in the mapping table and initialized with
java.util.ArrayList.Define RDBMS TablesConsider a situation where
we need to store our employee records in EMPLOYEE table which will
have followingstructure:create table EMPLOYEE (id INT NOT NULL
auto_increment,first_name VARCHAR(20) default NULL,last_name
VARCHAR(20) default NULL,salary INT default NULL,PRIMARY KEY
(id));
52. TUTORIALS POINTSimply Easy LearningFurther, assume each
employee can have one or more certificate associated with him/her.
A List collectionmapping needs an index column in the collection
table. The index column defines the position of the element inthe
collection. So we will store certificate related information in a
separate table which has following structure:create table
CERTIFICATE (id INT NOT NULL auto_increment,certificate_name
VARCHAR(30) default NULL,idx INT default NULL,employee_id INT
default NULL,PRIMARY KEY (id));There will be one-to-many
relationship between EMPLOYEE and CERTIFICATE objects.Define POJO
ClassesLet us implement a POJO class Employee which will be used to
persist the objects related to EMPLOYEE tableand having a
collection of certificates in List variable.import
java.util.*;public class Employee {private int id;private String
firstName;private String lastName;private int salary;private List
certificates;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;}public List getCertificates() {return certificates;
53. TUTORIALS POINTSimply Easy Learning}public void
setCertificates( List certificates ) {this.certificates =
certificates;}}We need to define another POJO class corresponding
to CERTIFICATE table so that certificate objects can bestored and
retrieved into the CERTIFICATE table.public class
Certificate{private int id;private String name;public Certificate()
{}public Certificate(String name) {this.name = name;}public int
getId() {return id;}public void setId( int id ) {this.id =
id;}public String getName() {return name;}public void setName(
String name ) {this.name = name;}}Define Hibernate Mapping FileLet
us develop our mapping file which instructs Hibernate how to map
the defined classes to the database tables.The element will be used
to define the rule for List collection used. The index of list is
always of type integerand is mapped using the element.This class
contains the employee detail.
54. TUTORIALS POINTSimply Easy LearningThis class contains the
certificate records.You