Tải bản đầy đủ (.pdf) (218 trang)

Hibernate Căn bản cho người mới bắt đầu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.73 MB, 218 trang )


Hibernate

About the Tutorial
Hibernate is a high-performance Object/Relational persistence and query service, which is
licensed under the open source GNU Lesser General Public License (LGPL) and is free to
download. Hibernate not only takes care of the mapping from Java classes to database
tables (and from Java data types to SQL data types), but also provides data query and
retrieval facilities.
This tutorial will teach you how to use Hibernate to develop your database based web
applications in simple and easy steps.

Audience
This tutorial is designed for all those Java programmers who would like to understand the
Hibernate framework and its API.

Prerequisites
We assume you have a good understanding of the Java programming language. A basic
understanding of relational databases, JDBC, and SQL will be very helpful in understanding
this tutorial.

Copyright & Disclaimer
© Copyright 2015 by Tutorials Point (I) Pvt. Ltd.
All the content and graphics published in this e-book are the property of Tutorials Point (I)
Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish
any contents or a part of the contents of this e-book in any manner without written consent
of the publisher.
We strive to update the contents of our website and tutorials as timely and as precisely as
possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt.
Ltd. provides no guarantee regarding the accuracy, timeliness, or completeness of our
website or its contents including this tutorial. If you discover any errors on our website or


in this tutorial, please notify us at

i


Hibernate

Table of Contents
About the Tutorial ........................................................................................................................ i
Audience ....................................................................................................................................... i
Prerequisites ................................................................................................................................. i
Copyright & Disclaimer ................................................................................................................ i
Table of Contents ........................................................................................................................ ii

1.

HIBERNATE – ORM OVERVIEW ...................................................... 1
What is JDBC? ............................................................................................................................. 1
Pros and Cons of JDBC .............................................................................................................. 1
Why Object Relational Mapping (ORM)? .................................................................................. 1
What is ORM? .............................................................................................................................. 3
Java ORM Frameworks ............................................................................................................... 4

2.

HIBERNATE – OVERVIEW ............................................................... 5
Hibernate Advantages ................................................................................................................ 5
Supported Databases ................................................................................................................. 6
Supported Technologies ............................................................................................................ 6


3.

HIBERNATE ARCHITECTURE ......................................................... 7
Configuration Object ................................................................................................................... 8
SessionFactory Object ............................................................................................................... 9
Session Object ............................................................................................................................ 9
Transaction Object ...................................................................................................................... 9
Query Object ................................................................................................................................ 9
Criteria Object .............................................................................................................................. 9

4.

HIBERNATE – ENVIRONMENT SETUP ......................................... 10
Downloading Hibernate ............................................................................................................ 10
Installing Hibernate ................................................................................................................... 10
ii


Hibernate

Hibernate Prerequisites ............................................................................................................ 11

5.

HIBERNATE – CONFIGURATION .................................................. 12
Hibernate with MySQL Database ............................................................................................. 13

6.

HIBERNATE – SESSIONS .............................................................. 16

Session Interface Methods ....................................................................................................... 17

7.

HIBERNATE – PERSISTENT CLASS.............................................. 19
Simple POJO Example .............................................................................................................. 19

8.

HIBERNATE – MAPPING FILES ..................................................... 21

9.

HIBERNATE – MAPPING TYPES ................................................... 24
Primitive Types .......................................................................................................................... 24
Date and Time Types ................................................................................................................ 24
Binary and Large Object Types ............................................................................................... 24
JDK-related Types ..................................................................................................................... 25

10. HIBERNATE – EXAMPLES ............................................................. 26
Create POJO Classes ................................................................................................................ 26
Create Database Tables ............................................................................................................ 27
Create Mapping Configuration File ......................................................................................... 27
Create Application Class .......................................................................................................... 29
Compilation and Execution ...................................................................................................... 32

11. HIBERNATE – O/R MAPPINGS ...................................................... 34
Collections Mappings ............................................................................................................... 34
Hibernate – Set Mappings ........................................................................................................ 35
Hibernate – SortedSet Mappings ............................................................................................. 45

Hibernate – List Mappings........................................................................................................ 57
Hibernate – Bag Mappings ....................................................................................................... 68
iii


Hibernate
Hibernate – Map Mappings ....................................................................................................... 78
Hibernate – SortedMap Mappings ........................................................................................... 88
Association Mappings ............................................................................................................ 100
Hibernate – Many-to-One Mappings ...................................................................................... 100
Hibernate – One-to-One Mappings ........................................................................................ 111
Hibernate – One-to-Many Mappings ...................................................................................... 122
Hibernate – Many-to-Many Mappings.................................................................................... 133
Component Mappings............................................................................................................. 144
Hibernate – Component Mappings ........................................................................................ 145

12. HIBERNATE – ANNOTATIONS ....................................................156
Environment Setup for Hibernate Annotation ...................................................................... 156
Annotated Class Example ...................................................................................................... 156
@Entity Annotation ................................................................................................................. 158
@Table Annotation.................................................................................................................. 158
@Id and @GeneratedValue Annotations .............................................................................. 158
@Column Annotation.............................................................................................................. 159
Create Application Class ........................................................................................................ 159
Database Configuration .......................................................................................................... 162
Compilation and Execution .................................................................................................... 163

13. HIBERNATE – QUERY LANGUAGE .............................................165
FROM Clause ........................................................................................................................... 165
AS Clause ................................................................................................................................. 165

SELECT Clause ....................................................................................................................... 166
WHERE Clause ........................................................................................................................ 166
ORDER BY Clause ................................................................................................................... 166
GROUP by Clause ................................................................................................................... 167
Using Named Parameters ....................................................................................................... 167
iv


Hibernate

UPDATE Clause ....................................................................................................................... 167
DELETE Clause ....................................................................................................................... 168
INSERT Clause ........................................................................................................................ 168
Aggregate Methods ................................................................................................................. 168
Pagination using Query .......................................................................................................... 169

14. HIBERNATE – CRITERIA QUERIES .............................................170
Restrictions with Criteria ........................................................................................................ 170
Pagination Using Criteria ....................................................................................................... 172
Sorting the Results ................................................................................................................. 172
Projections & Aggregations ................................................................................................... 172
Criteria Queries Example ........................................................................................................ 173
Compilation and Execution .................................................................................................... 179

15. HIBERNATE – NATIVE SQL.........................................................181
Scalar Queries ......................................................................................................................... 181
Entity Queries .......................................................................................................................... 181
Named SQL Queries ................................................................................................................ 181
Native SQL Example ............................................................................................................... 182
Compilation and Execution .................................................................................................... 187


16. HIBERNATE – CACHING .............................................................189
First-level Cache ...................................................................................................................... 189
Second-level Cache ................................................................................................................ 189
Query-level Cache ................................................................................................................... 190
The Second Level Cache ........................................................................................................ 190
Concurrency Strategies .......................................................................................................... 190
Cache Provider ........................................................................................................................ 191
The Query-level Cache............................................................................................................ 193
v


Hibernate

17. HIBERNATE – BATCH PROCESSING ..........................................195
Batch Processing Example .................................................................................................... 196
Compilation and Execution .................................................................................................... 201

18. HIBERNATE – INTERCEPTORS ...................................................202
How to Use Interceptors? ....................................................................................................... 202
Create POJO Classes .............................................................................................................. 204
Create Database Tables .......................................................................................................... 206
Create Mapping Configuration File ....................................................................................... 206
Create Application Class ........................................................................................................ 207
Compilation and Execution .................................................................................................... 210

vi


Hibernate


1. HIBERNATE – ORM OVERVIEW

What is JDBC?
JDBC stands for Java Database Connectivity. It provides a set of Java API for accessing
the relational databases from Java program. These Java APIs enables Java programs to
execute SQL statements and interact with any SQL compliant database.
JDBC provides a flexible architecture to write a database independent application that can
run on different platforms and interact with different DBMS without any modification.

Pros and Cons of JDBC
Pros of JDBC

Cons of JDBC

Clean and simple SQL processing

Complex if it is used in large projects

Good performance with large data

Large programming overhead

Very good for small applications

No encapsulation

Simple syntax so easy to learn

Hard to implement MVC concept. Query is

DBMS specific.

Why Object Relational Mapping (ORM)?
When we work with an object-oriented system, there is a mismatch between the object
model and the relational database. 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 and associated public function:
public class Employee {
private int id;
private String first_name;
private String last_name;
private int salary;

public Employee() {}
public Employee(String fname, String lname, int salary) {
this.first_name = fname;
this.last_name = lname;
this.salary = salary;
1


Hibernate

}
public int getId() {
return id;
}
public String getFirstName() {
return first_name;

}
public String getLastName() {
return last_name;
}
public int getSalary() {
return salary;
}
}
Consider the above objects are 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
a few pages or our application? Second, loading and storing objects in a relational database
exposes us to the following five mismatch problems:
Mismatch

Description


Granularity

Sometimes you will have an object model, which has more classes
than the number of corresponding tables in the database.

Inheritance

RDBMSs do not define anything similar to Inheritance, which is a
natural paradigm in object-oriented programming languages.

Identity

An RDBMS defines exactly one notion of 'sameness': the primary
key. Java, however, defines both object identity (a==b) and object
equality (a.equals(b)).

Associations

Object-oriented languages represent associations using object
references whereas an RDBMS represents an association as a foreign
key column.

2


Hibernate

Navigation


The ways you access objects in Java and in 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 between relational databases and object oriented programming languages
such as Java, C#, etc.
An ORM system has the following advantages over plain JDBC:
S.N.

Advantages

1

Let’s business code access objects rather than DB tables.

2

Hides details of SQL queries from OO logic.

3

Based on JDBC 'under the hood.'

4

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.

Solutions

1

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.


4

A technique to interact with transactional objects to perform dirty checking, lazy
association fetching, and other optimization functions.

3


Hibernate

Java ORM Frameworks
There are several persistent frameworks and ORM options in Java. A persistent framework
is an ORM service that stores and retrieves objects into a relational database.


Enterprise JavaBeans Entity Beans



Java Data Objects



Castor



TopLink




Spring DAO



Hibernate, and many more

4


2. HIBERNATE – OVERVIEW

Hibernate

Hibernate is an Object-Relational Mapping(ORM) solution for JAVA. It is 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 relieves the developer from 95% of common data persistence related
programming tasks.
Hibernate sits between traditional Java objects and database server to handle all the works
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 the database or in any table, then you need to change the XML
file properties only.



Abstracts away the unfamiliar SQL types and provides a way to work around
familiar Java Objects.



Hibernate does not require an application server to operate.



Manipulates Complex associations of objects of your database.



Minimizes database access with smart fetching strategies.



Provides simple querying of data.


5


Hibernate

Supported Databases
Hibernate supports almost all the major RDBMS. Following is a list of few of the database
engines supported by Hibernate:


HSQL Database Engine



DB2/NT



MySQL



PostgreSQL



FrontBase




Oracle



Microsoft SQL Server Database



Sybase SQL Server



Informix Dynamic Server

Supported Technologies
Hibernate supports a variety of other technologies, including:


XDoclet Spring



J2EE



Eclipse plug-ins




Maven

6


3. HIBERNATE ARCHITECTURE

Hibernate

Hibernate has a layered architecture which helps the user to operate without having to
know the underlying APIs. Hibernate makes use of the database and configuration data to
provide persistence services (and persistent objects) to the application.
Following is a very high level view of the Hibernate Application Architecture.

7


Hibernate
Following is a detailed view of the Hibernate Application Architecture with its important
core classes.

Hibernate uses various existing Java APIs, like JDBC, Java Transaction API(JTA), 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. It is 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.



Class Mapping Setup: This component creates the connection between the Java
classes and database tables.
8


Hibernate

SessionFactory Object
Configuration object is used to create a SessionFactory object which in turn 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 a heavyweight object; it is usually 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 (from JDBC or JTA).
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 objects are used to create and execute object oriented criteria queries to retrieve
objects.

9


Hibernate

4. HIBERNATE – ENVIRONMENT SETUP


This chapter explains how to install Hibernate and other associated packages to prepare
an environment for the Hibernate applications. We will work with MySQL database to
experiment with Hibernate examples, so make sure you already have a setup for MySQL
database. For more detail on MySQL, you can check our MySQL Tutorial.

Downloading Hibernate
It is assumed that you already have the latest version of Java installed on your system.
Following are the simple steps to download and install Hibernate on your system:


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.



Download
the
latest
version
/>


At the time of writing this tutorial, I downloaded hibernate-distribution3.6.4.Final and when you unzip the downloaded file, it will give you directory
structure as shown in the following image:

of

Hibernate

from


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.
10


Hibernate

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 will have to copy
library files from/lib into your CLASSPATH, and change your CLASSPATH variable
accordingly.
S.N.

Packages/Libraries


1

dom4j - XML parsing www.dom4j.org/

2

Xalan - XSLT Processor />
3

Xerces - The Xerces Java Parser />
4

cglib - Appropriate changes to Java classes at runtime
/>
5

log4j - Logging Framework />
6

Commons - Logging, Email etc. />
7

SLF4J - Logging Facade for Java

11


Hibernate

5. 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 will be required to configure for a
databases in a standalone situation:
S.N.

Properties and Description

1

hibernate.dialect
This property makes Hibernate generate the appropriate SQL for the chosen
database.

2

hibernate.connection.driver_class
The JDBC driver class.

3


hibernate.connection.url
The JDBC URL to the database instance.

4

hibernate.connection.username
The database username.

5

hibernate.connection.password
The database password.

6

hibernate.connection.pool_size
Limits the number of connections waiting in the Hibernate database connection
pool.

7

hibernate.connection.autocommit
Allows auto-commit mode to be used for the JDBC connection.

12


Hibernate
If you are using a database along with an application server and JNDI, then you would
have to configure the following properties:

S.N.

Properties and Description

1

hibernate.connection.datasource
The JNDI name defined in the application server context, which you are using
for the application.

2

hibernate.jndi.class
The InitialContext class for JNDI.

3

hibernate.jndi.<JNDIpropertyname>
Passes any JNDI property you like to the JNDI InitialContext.

4

hibernate.jndi.url
Provides the URL for JNDI.

5

hibernate.connection.username
The database username.


6

hibernate.connection.password
The database password.

Hibernate with MySQL Database
MySQL is one of the most popular open-source database systems available today. Let us
create hibernate.cfg.xml configuration file and place it in the root of your application's
classpath. You will have to make sure that you have testdb database available in your
MySQL database and you have a user test available to access the database.
The XML configuration file must conform to the Hibernate 3 Configuration DTD, which is
available at /><?xml version="1.0" encoding="utf-8"?>
" />
<hibernate-configuration>
<session-factory>

org.hibernate.dialect.MySQLDialect
</property>

com.mysql.jdbc.Driver
</property>

<!-- Assume test is the database name -->

13


Hibernate



jdbc:mysql://localhost/test
</property>

root
</property>

root123
</property>

<!-- List of XML mapping files -->
<mapping resource="Employee.hbm.xml"/>

</session-factory>
</hibernate-configuration>
The above configuration file includes <mapping> tags, which are related to hibernatemapping file and we will see in next chapter what exactly a hibernate mapping file is and
how and why do we use it?
Following is the list of various important databases dialect property type:
Database

Dialect Property

DB2

org.hibernate.dialect.DB2Dialect

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

Microsoft SQL Server 2000

org.hibernate.dialect.SQLServerDialect

Microsoft SQL Server 2005

org.hibernate.dialect.SQLServer2005Dialect

Microsoft SQL Server 2008

org.hibernate.dialect.SQLServer2008Dialect

MySQL


org.hibernate.dialect.MySQLDialect

Oracle (any version)

org.hibernate.dialect.OracleDialect

Oracle 11g

org.hibernate.dialect.Oracle10gDialect

Oracle 10g

org.hibernate.dialect.Oracle10gDialect
14


Hibernate

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

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

15


6. HIBERNATE – SESSIONS

Hibernate

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. The main function
of the Session is to offer, create, read, and delete operations for instances of mapped
entity classes.
Instances may exist in one of the following three states at a given point in time:


transient: A new instance of a persistent class, which is not associated with a

Session and has no representation 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 persistent instance 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 detached instance.

A Session instance is serializable if its persistent classes are serializable. A typical
transaction should use the following 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.
16


Hibernate

Session Interface Methods
There are number of methods provided by the Session interface, but I'm going to list
down a few important methods only, which we will use in this tutorial. You can check
Hibernate documentation for a complete list of methods associated with Session and
SessionFactory.
S.N.

Session Methods and Description

1

Transaction beginTransaction()
Begin a unit of work and return the associated Transaction object.

2

void cancelQuery()
Cancel the execution of the current query.

3

void clear()
Completely clear the session.


4

Connection close()
End the session by releasing the JDBC connection and cleaning up.

5

Criteria createCriteria(Class persistentClass)
Create a new Criteria instance, for the given entity class, or a superclass of an
entity class.

6

Criteria createCriteria(String entityName)
Create a new Criteria instance, for the given entity name.

7

Serializable getIdentifier(Object object)
Return the identifier value of the given entity as associated with this session.

8

Query createFilter(Object collection, String queryString)
Create a new instance of Query for the given collection and filter string.

9

Query createQuery(String queryString)

Create a new instance of Query for the given HQL query string.

10

SQLQuery createSQLQuery(String queryString)
Create a new instance of SQLQuery for the given SQL query string.

11

void delete(Object object)
Remove a persistent instance from the datastore.

12
13
14

void delete(String entityName, Object object)
Remove a persistent instance from the datastore.
Session get(String entityName, Serializable id)
Return the persistent instance of the given named entity with the given
identifier, or null if there is no such persistent instance.
SessionFactory getSessionFactory()
Get the session factory, which created this session.

15

void refresh(Object object)
Re-read the state of the given instance from the underlying database.

16


Transaction getTransaction()
Get the Transaction instance associated with this session.

17

boolean isConnected()
Check if the session is currently connected.

17


Hibernate

18

boolean isDirty()
Does this session contain any changes, which must be synchronized with the
database?

19

boolean isOpen()
Check if the session is still open.

20

Serializable save(Object object)
Persist the given transient instance, first assigning a generated identifier.


21

void saveOrUpdate(Object object)
Either save(Object) or update(Object) the given instance.

22

void update(Object object)
Update the persistent instance with the identifier of the given detached
instance.

23

void update(String entityName, Object object)
Update the persistent instance with the identifier of the given detached
instance.

18


×