SlideShare a Scribd company logo
Object Relational
Mapping (ORM)
and Hibernate
INF5750/9750 - Lecture 2 (Part III)
Problem area
● When working with object-oriented systems, there’s a
mismatch between the object model and the relational
database
● How do we map one to the other?
public class Student
{
private String name;
private String address;
private Set<Course> courses;
private Set<Degree> degrees;
}
Java object with properties
and associations
Relational database
with tables and columns
Problem area
● How to map associations between objects?
○ References are directional, foreign keys not
○ Foreign keys can’t represent many-to-many associations
Student Degree
N N
public class Student
{
private Collection<Degree> degrees;
...
DEGREE
degree_id
type
name
STUDENT
student_id
name
address
degree_id
Java
Relational
database
Need for ORM
● Write SQL conversion methods by hand using JDBC
○ Tedious and requires lots of code
○ Extremely error-prone
○ Non-standard SQL ties the application to specific databases
○ Vulnerable to changes in the object model
○ Difficult to represent associations between objects
Student Course
Degree
public void addStudent( Student student )
{
String sql = ”INSERT INTO student ( name, address ) VALUES ( ’” +
student.getName() + ”’, ’” + student.getAddress() + ”’ )”;
// Initiate a Connection, create a Statement, and execute the query
}
Approaches to ORM
● Use Java serialization – write application state to a file
○ Can only be accessed as a whole
○ Not possible to access single objects
● Object oriented database systems
○ No complete query language implementation exists
○ Lacks necessary features
The preferred solution
● Use a Object-Relational Mapping System (eg. Hibernate)
● Provides a simple API for storing and retrieving Java
objects directly to and from the database
● Non-intrusive: No need to follow specific rules or design
patterns
● Transparent: Your object model is unaware
Student Course
Degree
ORM / Hibernate
Magic happens
here!
(Domain model) (Relational database)
ORM and Architecture
Presentation Layer
Service/Business Layer
Persistence Layer
ORM / Hibernate
(Database)
Domain
Model
● Middleware that
manages persistence
● Provides an abstraction
layer between the
domain model and the
database
Example app: The EventManager
Java
objects
Hibernate
mapping files
Hibernate
configuration
Hibernate
API
Java objects (POJO)
public class Event
{
private int id;
private String title;
private Date date;
private Set<Person> persons = new HashSet<Person>();
public Event() {
}
public int getId() {
return id;
}
private void setId( int id ) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle( String title ) {
this.title = title;
}
// Getter and setter for date and persons
}
Declare accessors and mutators for
persistent fields (optional)
● Properties need not be declared
public - Hibernate can persist a
property with a default, protected or
private get / set pair.
No-argument constructor
(required)
Identifier property
(optional)
Prefer non-final classes
(optional)
Example app: The EventManager
Java
objects
Hibernate
mapping files
Hibernate
configuration
Hibernate
API
Hibernate mapping files
● Tells Hibernate which tables and columns to use to load
and store objects
DTD
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name=”no.uio.inf5750.Event” table=”events”>
<id name="id” column=”event_id”>
<generator class="native"/>
</id>
<property name=”title” not-null=”true” unique=”true”/>
<property name=”date” type=”date” column=”event_date”/>
<set name=”persons” table=”event_persons”>
<key column=”event_id”/>
<many-to-many column=”person_id”
class=”no.uio.inf5750.example.model.Person”/>
</set>
</class>
</hibernate-mapping>
Class element
Identifier mapping & generation
Property mapping
Filename: Event.hbm.xml
Unidirectional many-to-many
association mapping
Property mapping
...
<property name=”title” not-null=”true” unique=”true”/>
<property name=”date” type=”Date” column=”event_date”/>
...
The name property refers
to the get/set-methods
Property name used as
default if no column is specified
Types are Hibernate mapping types.
Hibernate will guess if no type is specified.
Title must be
not null and unique
Association mapping
...
<set name=”persons” table=”event_persons”>
<key column=”event_id”/>
<many-to-many column=”person_id”
class=”no.uio.inf5750.example.model.Person”/>
</set>
...
The name property refers
to the get/set-methods
Many-to-many associations
require a link table
Column name
for ”this” side
of association
Column name
for ”other” side
of association
Reference to the
associated class
Hibernate mapping types
● Hibernate will translate Java types to SQL / database types
for the properties of your mapped classes
Java type Hibernate type SQL type
java.lang.String string VARCHAR
java.util.Date date, time DATE, TIME
java.lang.Integer, int integer INT
java.lang.Class class varchar
java.io.Serializable serializable BLOB, BINARY
Example app: The EventManager
Java
objects
Hibernate
mapping files
Hibernate
configuration
Hibernate
API
Hibernate configuration
● Also referred to hibernate properties
● Each database has a dialect
○ hibernate.dialect = org.hibernate.dialect.H2Dialect
● Must also specify:
○ JDBC driver class
○ Connection URL
○ Username
○ Password
● More later in the lecture...
Example app: The EventManager
Java
objects
Hibernate
mapping files
Hibernate
configuration
Hibernate
API
The SessionFactory interface
● When all mappings have been parsed by the org.
hibernate.cfg.Configuration, the application must obtain
a factory to get org.hibernate.Session
● SessionFactory provides org.hibernate.Session
instances to the application
● Shared among application threads
● Most important method is getCurrentSession
OR let Spring inject it for you
SessionFactory sessionFactory = cfg.buildSessionFactory();
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
….
</bean
The Session interface
● Obtained from a SessionFactory
● Main runtime interface between a Java application and
Hibernate
● Responsible for storing and retrieving objects
● Think of it as a collection of loaded objects related to a
single unit of work
Session session = sessionFactory.getCurrentSession();
Instance states
● An object instance state is related to the persistence
context
● The persistence context = a Hibernate Session instance
● Three types of instance states:
○ Transient
■ The instance is not associated with any persistence context
○ Persistent
■ The instance is associated with a persistence context
○ Detached
■ The instance was associated with a persistence context which
has been closed – currently not associated
The Session interface
Event event = new Event( ”title”, new Date() );
Integer id = (Integer) session.save( event );
Make a transient object
persistent
Event event = (Event) session.load( Event.class, id );
Load an object – if
matching row exists
Load an object – if
unsure about matching row
Event event = (Event) session.get( Event.class, id );
Delete an object – make
it transient again
session.delete( event );
The Session interface
session.update( event );
Update an object – if its
detached
Synchronize database with
persistence context
session.flush(); // Happens auto. at transaction.commit()
session.saveOrUpdate( event );
Update or save an object – if
you’re unsure about the state
The Criteria interface
● You need a query when you don’t know the identifiers of
the objects you are looking for
● Criteria used for programmatic query creation
Criteria criteria = session.createCriteria( Event.class );
List events = criteria.list();
Retrieve all instances of Event
Criteria criteria = session.createCriteria( Event.class );
criteria.add( Restrictions.eq( ”title”, ”Rolling Stones” ) );;
criteria.add( Restrictions.gt( ”date”, new Date() ) );
criteria.setMaxResults( 10 );
List events = criteria.list();
Narrow the result set
Transactions
● Transaction: A set of database operations which must
be executed in entirety or not at all
● Should end either with a commit or a rollback
● All communication with a database has to occur inside a
transaction!
Transaction begins
Operation A: INSERT INTO...
Operation B: INSERT INTO...
Transaction commit
(SUCCESS)
(ERROR)
Transaction rollback
Hibernate in real-life apps
● Spring used for SessionFactory management
○ Spring has excellent ORM integration
○ Custom SessionFactory management is “boilerplate-code”
● Spring used for Transaction management
○ Custom tx management is error prone
○ Support for declarative tx management with annotations
○ Consistent programming model across JTA, JDBC, Hibernate
● Annotate transactional methods / class with @Transactional
● Hibernate’s own connection pooling is basic. Hibernate allows
external JDBC pooling through library called C3P0
Spring-Hibernate dependencies
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.5.1-Final</version>
</dependency>
<dependency>
<groupId>geronimo-spec</groupId>
<artifactId>geronimo-spec-jta</artifactId>
<version>1.0-M1</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.2.136</version>
</dependency>
Spring-Hibernate configuration
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>hibernate/Event.hbm.xml</value>
<value>hibernate/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="org.h2.Driver"/>
<property name="jdbcUrl" value="jdbc:h2:mem:eventmanager;DB_CLOSE_ON_EXIT=FALSE"/>
<property name="user" value="sa"/>
<property name="password" value=""/>
</bean>
Enables
annotations
Can be
injected
like any bean
Points to
mapping files
Hibernate properties
● H2 database (fast inmemory DB)
● Automatically create tables
Connection
properties
Example: The EventManager
Java
objects
Hibernate
mapping files
Hibernate
configuration
Hibernate
API
Advantages of ORM
● Productivity
○ Eliminates lots of repetitive code – focus on business logic
○ Database schema is generated automatically
● Maintainability
○ Fewer lines of code – easier to understand
○ Easier to manage change in the object model
● Database vendor independence
○ The underlying database is abstracted away
○ Can be configured outside the application
● Performance
○ Lazy loading – associations are fetched when needed
○ Caching
Resources
● Spring documentation chapter 13
http://static.springsource.org/spring/docs/3.2.x/spring-
framework-reference/html/orm.html
● Hibernate reference documentation
●www.hibernate.org -> Documentation -> Reference

More Related Content

PPTX
New-Hibernate-introduction cloud cc.pptx
PPT
5-Hibernate.ppt
PPT
hibernate with JPA
PPTX
CSharp presentation and software developement
PDF
PofEAA and SQLAlchemy
PPTX
Real World MVC
PPTX
Introduction to Hibernate Framework
PPTX
Introduction to Hibernate Framework
New-Hibernate-introduction cloud cc.pptx
5-Hibernate.ppt
hibernate with JPA
CSharp presentation and software developement
PofEAA and SQLAlchemy
Real World MVC
Introduction to Hibernate Framework
Introduction to Hibernate Framework

Similar to inf5750---lecture-2.-c---hibernate-intro.pdf (20)

PPT
Eclipse Day India 2011 - Extending JDT
PDF
Intro to Core Data
PDF
Hibernate Presentation
PDF
Hibernate An Introduction
PPTX
Spring framework part 2
PPT
Patni Hibernate
PDF
Introduction to JPA and Hibernate including examples
PPTX
Database Programming Techniques
PPT
PDF
hibernate-presentation-1196607644547952-4.pdf
PPTX
NoSQL Endgame DevoxxUA Conference 2020
PPT
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
PPTX
Hibernate
PPSX
Hibernate - Part 1
PPTX
MVC and Entity Framework
PDF
Spring data requery
PDF
Core2 Document - Java SCORE Overview.pptx.pdf
PPSX
Hibernate - Part 2
PPTX
Session 40 - Hibernate - Part 2
PDF
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Eclipse Day India 2011 - Extending JDT
Intro to Core Data
Hibernate Presentation
Hibernate An Introduction
Spring framework part 2
Patni Hibernate
Introduction to JPA and Hibernate including examples
Database Programming Techniques
hibernate-presentation-1196607644547952-4.pdf
NoSQL Endgame DevoxxUA Conference 2020
DESIGNING A PERSISTENCE FRAMEWORK WITH PATTERNS.ppt
Hibernate
Hibernate - Part 1
MVC and Entity Framework
Spring data requery
Core2 Document - Java SCORE Overview.pptx.pdf
Hibernate - Part 2
Session 40 - Hibernate - Part 2
Java Web Programming on Google Cloud Platform [2/3] : Datastore
Ad

Recently uploaded (20)

PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
System and Network Administraation Chapter 3
PPTX
Introduction to Artificial Intelligence
PDF
medical staffing services at VALiNTRY
PDF
Understanding Forklifts - TECH EHS Solution
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPTX
Essential Infomation Tech presentation.pptx
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
L1 - Introduction to python Backend.pptx
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
AI in Product Development-omnex systems
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
System and Network Administration Chapter 2
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
System and Network Administraation Chapter 3
Introduction to Artificial Intelligence
medical staffing services at VALiNTRY
Understanding Forklifts - TECH EHS Solution
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Essential Infomation Tech presentation.pptx
Design an Analysis of Algorithms I-SECS-1021-03
L1 - Introduction to python Backend.pptx
Odoo Companies in India – Driving Business Transformation.pdf
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Wondershare Filmora 15 Crack With Activation Key [2025
2025 Textile ERP Trends: SAP, Odoo & Oracle
AI in Product Development-omnex systems
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
System and Network Administration Chapter 2
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Navsoft: AI-Powered Business Solutions & Custom Software Development
Ad

inf5750---lecture-2.-c---hibernate-intro.pdf

  • 1. Object Relational Mapping (ORM) and Hibernate INF5750/9750 - Lecture 2 (Part III)
  • 2. Problem area ● When working with object-oriented systems, there’s a mismatch between the object model and the relational database ● How do we map one to the other? public class Student { private String name; private String address; private Set<Course> courses; private Set<Degree> degrees; } Java object with properties and associations Relational database with tables and columns
  • 3. Problem area ● How to map associations between objects? ○ References are directional, foreign keys not ○ Foreign keys can’t represent many-to-many associations Student Degree N N public class Student { private Collection<Degree> degrees; ... DEGREE degree_id type name STUDENT student_id name address degree_id Java Relational database
  • 4. Need for ORM ● Write SQL conversion methods by hand using JDBC ○ Tedious and requires lots of code ○ Extremely error-prone ○ Non-standard SQL ties the application to specific databases ○ Vulnerable to changes in the object model ○ Difficult to represent associations between objects Student Course Degree public void addStudent( Student student ) { String sql = ”INSERT INTO student ( name, address ) VALUES ( ’” + student.getName() + ”’, ’” + student.getAddress() + ”’ )”; // Initiate a Connection, create a Statement, and execute the query }
  • 5. Approaches to ORM ● Use Java serialization – write application state to a file ○ Can only be accessed as a whole ○ Not possible to access single objects ● Object oriented database systems ○ No complete query language implementation exists ○ Lacks necessary features
  • 6. The preferred solution ● Use a Object-Relational Mapping System (eg. Hibernate) ● Provides a simple API for storing and retrieving Java objects directly to and from the database ● Non-intrusive: No need to follow specific rules or design patterns ● Transparent: Your object model is unaware Student Course Degree ORM / Hibernate Magic happens here! (Domain model) (Relational database)
  • 7. ORM and Architecture Presentation Layer Service/Business Layer Persistence Layer ORM / Hibernate (Database) Domain Model ● Middleware that manages persistence ● Provides an abstraction layer between the domain model and the database
  • 8. Example app: The EventManager Java objects Hibernate mapping files Hibernate configuration Hibernate API
  • 9. Java objects (POJO) public class Event { private int id; private String title; private Date date; private Set<Person> persons = new HashSet<Person>(); public Event() { } public int getId() { return id; } private void setId( int id ) { this.id = id; } public String getTitle() { return title; } public void setTitle( String title ) { this.title = title; } // Getter and setter for date and persons } Declare accessors and mutators for persistent fields (optional) ● Properties need not be declared public - Hibernate can persist a property with a default, protected or private get / set pair. No-argument constructor (required) Identifier property (optional) Prefer non-final classes (optional)
  • 10. Example app: The EventManager Java objects Hibernate mapping files Hibernate configuration Hibernate API
  • 11. Hibernate mapping files ● Tells Hibernate which tables and columns to use to load and store objects DTD <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name=”no.uio.inf5750.Event” table=”events”> <id name="id” column=”event_id”> <generator class="native"/> </id> <property name=”title” not-null=”true” unique=”true”/> <property name=”date” type=”date” column=”event_date”/> <set name=”persons” table=”event_persons”> <key column=”event_id”/> <many-to-many column=”person_id” class=”no.uio.inf5750.example.model.Person”/> </set> </class> </hibernate-mapping> Class element Identifier mapping & generation Property mapping Filename: Event.hbm.xml Unidirectional many-to-many association mapping
  • 12. Property mapping ... <property name=”title” not-null=”true” unique=”true”/> <property name=”date” type=”Date” column=”event_date”/> ... The name property refers to the get/set-methods Property name used as default if no column is specified Types are Hibernate mapping types. Hibernate will guess if no type is specified. Title must be not null and unique
  • 13. Association mapping ... <set name=”persons” table=”event_persons”> <key column=”event_id”/> <many-to-many column=”person_id” class=”no.uio.inf5750.example.model.Person”/> </set> ... The name property refers to the get/set-methods Many-to-many associations require a link table Column name for ”this” side of association Column name for ”other” side of association Reference to the associated class
  • 14. Hibernate mapping types ● Hibernate will translate Java types to SQL / database types for the properties of your mapped classes Java type Hibernate type SQL type java.lang.String string VARCHAR java.util.Date date, time DATE, TIME java.lang.Integer, int integer INT java.lang.Class class varchar java.io.Serializable serializable BLOB, BINARY
  • 15. Example app: The EventManager Java objects Hibernate mapping files Hibernate configuration Hibernate API
  • 16. Hibernate configuration ● Also referred to hibernate properties ● Each database has a dialect ○ hibernate.dialect = org.hibernate.dialect.H2Dialect ● Must also specify: ○ JDBC driver class ○ Connection URL ○ Username ○ Password ● More later in the lecture...
  • 17. Example app: The EventManager Java objects Hibernate mapping files Hibernate configuration Hibernate API
  • 18. The SessionFactory interface ● When all mappings have been parsed by the org. hibernate.cfg.Configuration, the application must obtain a factory to get org.hibernate.Session ● SessionFactory provides org.hibernate.Session instances to the application ● Shared among application threads ● Most important method is getCurrentSession OR let Spring inject it for you SessionFactory sessionFactory = cfg.buildSessionFactory(); <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> …. </bean
  • 19. The Session interface ● Obtained from a SessionFactory ● Main runtime interface between a Java application and Hibernate ● Responsible for storing and retrieving objects ● Think of it as a collection of loaded objects related to a single unit of work Session session = sessionFactory.getCurrentSession();
  • 20. Instance states ● An object instance state is related to the persistence context ● The persistence context = a Hibernate Session instance ● Three types of instance states: ○ Transient ■ The instance is not associated with any persistence context ○ Persistent ■ The instance is associated with a persistence context ○ Detached ■ The instance was associated with a persistence context which has been closed – currently not associated
  • 21. The Session interface Event event = new Event( ”title”, new Date() ); Integer id = (Integer) session.save( event ); Make a transient object persistent Event event = (Event) session.load( Event.class, id ); Load an object – if matching row exists Load an object – if unsure about matching row Event event = (Event) session.get( Event.class, id ); Delete an object – make it transient again session.delete( event );
  • 22. The Session interface session.update( event ); Update an object – if its detached Synchronize database with persistence context session.flush(); // Happens auto. at transaction.commit() session.saveOrUpdate( event ); Update or save an object – if you’re unsure about the state
  • 23. The Criteria interface ● You need a query when you don’t know the identifiers of the objects you are looking for ● Criteria used for programmatic query creation Criteria criteria = session.createCriteria( Event.class ); List events = criteria.list(); Retrieve all instances of Event Criteria criteria = session.createCriteria( Event.class ); criteria.add( Restrictions.eq( ”title”, ”Rolling Stones” ) );; criteria.add( Restrictions.gt( ”date”, new Date() ) ); criteria.setMaxResults( 10 ); List events = criteria.list(); Narrow the result set
  • 24. Transactions ● Transaction: A set of database operations which must be executed in entirety or not at all ● Should end either with a commit or a rollback ● All communication with a database has to occur inside a transaction! Transaction begins Operation A: INSERT INTO... Operation B: INSERT INTO... Transaction commit (SUCCESS) (ERROR) Transaction rollback
  • 25. Hibernate in real-life apps ● Spring used for SessionFactory management ○ Spring has excellent ORM integration ○ Custom SessionFactory management is “boilerplate-code” ● Spring used for Transaction management ○ Custom tx management is error prone ○ Support for declarative tx management with annotations ○ Consistent programming model across JTA, JDBC, Hibernate ● Annotate transactional methods / class with @Transactional ● Hibernate’s own connection pooling is basic. Hibernate allows external JDBC pooling through library called C3P0
  • 26. Spring-Hibernate dependencies ... <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> ... <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.5.1-Final</version> </dependency> <dependency> <groupId>geronimo-spec</groupId> <artifactId>geronimo-spec-jta</artifactId> <version>1.0-M1</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.2.136</version> </dependency>
  • 27. Spring-Hibernate configuration <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> <property name="dataSource" ref="dataSource"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> <value>hibernate/Event.hbm.xml</value> <value>hibernate/Person.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> <prop key="hibernate.hbm2ddl.auto">create-drop</prop> </props> </property> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="org.h2.Driver"/> <property name="jdbcUrl" value="jdbc:h2:mem:eventmanager;DB_CLOSE_ON_EXIT=FALSE"/> <property name="user" value="sa"/> <property name="password" value=""/> </bean> Enables annotations Can be injected like any bean Points to mapping files Hibernate properties ● H2 database (fast inmemory DB) ● Automatically create tables Connection properties
  • 28. Example: The EventManager Java objects Hibernate mapping files Hibernate configuration Hibernate API
  • 29. Advantages of ORM ● Productivity ○ Eliminates lots of repetitive code – focus on business logic ○ Database schema is generated automatically ● Maintainability ○ Fewer lines of code – easier to understand ○ Easier to manage change in the object model ● Database vendor independence ○ The underlying database is abstracted away ○ Can be configured outside the application ● Performance ○ Lazy loading – associations are fetched when needed ○ Caching
  • 30. Resources ● Spring documentation chapter 13 http://static.springsource.org/spring/docs/3.2.x/spring- framework-reference/html/orm.html ● Hibernate reference documentation ●www.hibernate.org -> Documentation -> Reference