![Page 1: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/1.jpg)
Enterprise Application Development
Sadegh Aliakbary
An Introduction to Hibernate Framework
www.JavaCup.ir
![Page 2: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/2.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
2
Copyright ©2014 JAVACUP.ir All rights reserved. Redistribution of JAVACUP contents is not
prohibited if JAVACUP is clearly noted as the source in the used case.
JAVACUP shall not be liable for any errors in the content, or for any actions taken in reliance thereon.
Please send your feedback to [email protected]
JAVACUP.ir
![Page 3: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/3.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
3
Outline Object Relational Mapping Hibernate DAO and Generic DAO Patterns
JAVACUP.ir
![Page 4: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/4.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
4
Hibernate
JAVACUP.ir
http://www.hibernate.org/ Hosted by the JBoss Community
Open Source created by Gavin King in 2001 Hibernate is a high-performance
Object/Relational persistence and query service
Mapping Java objects to relational databases Today
Collection of projects/frameworks for extended use of POJO (plain old Java objects)
![Page 5: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/5.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
5
Role of Hibernate
JAVACUP.ir
Hibernate sits between traditional Java objects and database server
To handle all the work in persisting those objects
Based on the appropriate O/R mechanisms and patterns
![Page 6: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/6.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
6
Hibernate Position
JAVACUP.ir
![Page 7: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/7.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
7
Hibernate Terminology
JAVACUP.ir
Configuration Object Database Connection Class Mapping Setup
SessionFactory Object Factory for sessions Thread-safe heavyweight object created during application start up and kept for
later use At least one SessionFactory object per database
![Page 8: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/8.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
8
Hibernate Terminology (2)
JAVACUP.ir
Session Object For physical connection with a database lightweight instantiated each time an interaction is needed with DB Not thread-safe
Transaction Object Query Object
String-based HQL: some OO facilities is available SQL: usually is not recommended. Why?
Criteria Object Fully object oriented queries
![Page 9: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/9.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
9
Benefits of Hibernate
JAVACUP.ir
Simpler data persistence Automatically handles mapping SQL to
Object and vice versa Automatic creation of database schemas Automatic updating of database schemas
Add a field to an object; Hibernate converts your existing database for you.
Provides search functionality
![Page 10: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/10.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
10
Benefits of Hibernate (2)
JAVACUP.ir
Simpler database management No JDBC code or SQL code needed
Yet you can still use SQL if you want Easy to swap out database engines by a
simple configuration change DBMS independence No need to create the schema on the new database
It’s free LGPL (use in open or closed source project) Open source and standards = no vendor
lock-in
![Page 11: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/11.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
11
Hibernate Stack
JAVACUP.ir
![Page 12: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/12.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
12
Hibernate Projects
JAVACUP.ir
![Page 13: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/13.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
13
Hibernate Projects (2) Core
Provides the core functionality of object relational mapping and persistence
Shards Provides for horizontal partitioning of Core so you can put
object data in multiple databases Sharding: Rows of a database table are held separately
Search Combines Apache Lucene full-text search engine with Core. Extends the basic query capabilities of Core.
Tools Eclipse plugins to facilitate
Creating Hibernate mapping files Database connection configurations Reverse engineering existing databases into Java class code
JAVACUP.ir
![Page 14: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/14.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
14
Hibernate Projects (3) Validator
JSR 303 - Bean Validation Standardized way of annotating JavaBean fields with value
constraints @NotNull on a bean field also gets set in the database
schema Metamodel Generator
Auto-creation of Criteria classes for use in JPA Criteria API Non-string (strongly-typed) based API for object-based
queries OGM (Object/Grid Mapper)
Allows use of NoSQL data stores versus SQL relational providing Java Persistence (JPA) support for NoSQL
solutions
JAVACUP.ir
![Page 15: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/15.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
15
JDBC
JAVACUP.ir
Java DataBase Connectivity API for accessing relational databases from a
Java program SQL-based Flexible architecture to write DBMS-
independent applications Fully independent? no.
![Page 16: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/16.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
16
JDBC Pros and Cons
JAVACUP.ir
Pros Clean and simple SQL processing Good performance with large data Very good for small applications Simple syntax so easy to learn
Cons Complex if it is used in large projects Large programming overhead No encapsulation Query is DBMS specific
![Page 17: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/17.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
17
JDBC Example
JAVACUP.ir
Class.forName("com.mysql.jdbc.Driver");String SQL = "SELECT * FROM classes";try ( Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost/cse3330a", "root", "aSecret123"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(SQL) ) {
while (rs.next()) { System.out.println(rs.getString("prof")); }}
![Page 18: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/18.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
18
JDBC + Spring
JAVACUP.ir
DataSource object JdbcTemplate object RowMapper
a simple ORM for select queries
String SQL = "select age from Student where id = ?";
int age = jdbcTemplate.queryForInt(SQL, new Object[]{10});
String SQL = "select * from Student where id = ?";
Student student = jdbcTemplate.queryForObject(
SQL, new Object[]{10}, new StudentMapper());
![Page 19: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/19.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
19
Object Relational Mapping
JAVACUP.ir
RDBMSs represent data in a tabular format Relational
Object-oriented languages, such as Java or C# represent data as an interconnected graph of objects
Context gap
![Page 20: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/20.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
20
Hibernate Class Entities Class attributes
Hibernate uses reflection to populate Can be private or whatever
Class requirements Default constructor
JavaBean pattern common Do not make the entity classes final 3 methods of serialization definition
Following slides
JAVACUP.ir
![Page 21: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/21.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
21
Hibernate Annotation Mappings Annotations in code
Beginning of class Indicate class is Entity
Class doesn’t have to implement java.lang.Serializable Define database table Define which attributes to map to columns
Supports auto-increment IDs too Can dictate value restrictions (not null, etc) Can dictate value storage type
Existed before JPA standard (later slides) Doesn’t require a separate hbm.xml mapping file
(discussed later) But is tied to code
JAVACUP.ir
![Page 22: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/22.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
22
Hibernate Annotation Example@Entity@Table( name = "EVENTS" )public class Event { private Long id;…
@Id@GeneratedValue(generator="increment”@GenericGenerator(name="increment", strategy = "increment")public Long getId() { return id; }
@Temporal(TemporalType.TIMESTAMP)@Column(name = "EVENT_DATE") public Date getDate() { return date; } public void setDate(Date date) { this.date = date; }
…}
JAVACUP.ir
![Page 23: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/23.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
23
Hibernate Annotation Example (2)@Entity@Table( name = "EVENTS" )public class Event { private Long id;…
@Id@GeneratedValue(generator="increment”@GenericGenerator(name="increment", strategy = "increment")public Long getId() { return id; }
@Temporal(TemporalType.TIMESTAMP)@Column(name = "EVENT_DATE") public Date getDate() { return date; } public void setDate(Date date) { this.date = date; }
…}
Tells hibernate this goes into the EVENTS table
JAVACUP.ir
![Page 24: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/24.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
24
Hibernate Annotation Example (3)@Entity@Table( name = "EVENTS" )public class Event { private Long id;…
@Id@GeneratedValue(generator="increment”@GenericGenerator(name="increment", strategy = "increment")public Long getId() { return id; }
@Temporal(TemporalType.TIMESTAMP)@Column(name = "EVENT_DATE") public Date getDate() { return date; } public void setDate(Date date) { this.date = date; }
…}
Tells hibernate that this is an auto generated field for the
database
JAVACUP.ir
![Page 25: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/25.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
25
Hibernate Annotation Example (4)@Entity@Table( name = "EVENTS" )public class Event { private Long id;…
@Id@GeneratedValue(generator="increment”@GenericGenerator(name="increment", strategy = "increment")public Long getId() { return id; }
@Temporal(TemporalType.TIMESTAMP)@Column(name = "EVENT_DATE") public Date getDate() { return date; }
public void setDate(Date date) { this.date = date; }…}
Note that you don’t need any annotations on the actual
private fields or setters if you use the standard JavaBean
pattern.The getter defines it.
JAVACUP.ir
![Page 26: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/26.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
26
Hibernate Annotation Example (5)@Entity@Table( name = "EVENTS" )public class Event {…
private String title;
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
…}
Also note that this is automatically stored with a
column name of “title” so we didn’t have to add any
annotations
JAVACUP.ir
![Page 27: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/27.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
27
JPA Annotation Became standard
Came after Hibernate annotations Works almost like Hibernate annotations
Requires “META-INF/persistence.xml” file Defines data source configuration HibernatePersistence provider
Auto-detects any annotated classes Auto-detects any hbm.xml class mapping files
(later slides) Allows explicit class loading for mapping
Annotation syntax Same as Hibernate Hibernate has a few extensions (see docs)
JAVACUP.ir
![Page 28: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/28.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
28
JPA 2 XML JPA 2 XML
like Hibernate’s hbm.xml discussed later Separate from code unlike in-line
annotations
http://java.dzone.com/articles/persisting-entity-classesJAVACUP.ir
![Page 29: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/29.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
29
Hibernate *.hbm.xml Mappings For each class
Define ClassName.hbm.xml ClassName not required convention
Usually stored in same package I like the convention of
src/main/java (actual .java source) src/main/resources (any configuration files, et cetera) src/main/hibernate (I put all of my .hbm.xml here)
Matching folder/package structure to src/main/java
Optionally multiple classes in one .hbm.xml possible Not common convention though
Becoming legacy in favor of JPA 2 XML or Annotations
JAVACUP.ir
![Page 30: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/30.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
30
Hibernate *.hbm.xml Mappings (2)<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.hbm">
<class name="Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="increment"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title"/> </class>
</hibernate-mapping>
JAVACUP.ir
![Page 31: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/31.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
31
Hibernate *.hbm.xml Mappings (3)<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.hbm">
<class name="Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="increment"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title"/> </class>
</hibernate-mapping>
Define what package for the
class(es)
JAVACUP.ir
![Page 32: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/32.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
32
Hibernate *.hbm.xml Mappings (4)<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.hbm">
<class name="Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="increment"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title"/> </class>
</hibernate-mapping>
The class name and data store table
JAVACUP.ir
![Page 33: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/33.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
33
Hibernate *.hbm.xml Mappings (5)<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.hbm">
<class name="Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="increment"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title"/> </class>
</hibernate-mapping>
The properties of the class to save (getAttribute() or class.attribute style)
JAVACUP.ir
![Page 34: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/34.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
34
Hibernate Primitive Types
JAVACUP.ir
![Page 35: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/35.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
35
Date Types
JAVACUP.ir
![Page 36: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/36.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
36
Binary and large object types
JAVACUP.ir
![Page 37: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/37.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
37
Hibernate Configuration Need to define
Data source (database) connection Engine, URI, credentials, etc Pooling mechanism (Hibernate provides C3P0)
Mapping XML definitions or classes with annotations You specify which ones to actually activate Also allows for multiple databases and mappings Many IDE and Ant tools exist to auto-create .hbm.xml and
hibernate.cfg.xml/persistence.xml
JPA Provides some auto-discovery at startup
Limited to jar files
Hibernate Has XML or .properties (not used much)
Approaches XML configuration file Programmatic
JAVACUP.ir
![Page 38: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/38.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
38
hibernate.cfg.xml Usually placed in root of the classpath
(/hibernate.cfg.xml) for auto-detection. You can also programmatically load it in code.
<hibernate-configuration> <session-factory>… </session-factory></hibernate-configuration>
JAVACUP.ir
![Page 39: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/39.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
39
<session-factory>
JAVACUP.ir
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:mem:db1 </property>
<property name="connection.username">sa</property>
<property name="connection.password">123</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping class="org.hibernate.tutorial.annotations.Event"/>
![Page 40: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/40.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
40
hibernate.cfg.xml (2)
<!-- Database connection settings -->
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:mem:db1</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
You define the database settings in this manner There are third party library extensions that allow the
password inside hibernate.cfg.xml to be encrypted as well Or you could use programmatic configuration instead
You can’t use system/environment variables inside the config
JAVACUP.ir
![Page 41: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/41.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
41
hibernate.cfg.xml (3)<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
Depending on the database/data source you use you need to let Hibernate know how to talk to it. Hibernate supports many data sources.
<!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property>
You can have Hibernate: “validate” - Exists and has expected tables/columns; don’t touch
data/schema “update” – Create if needed and update tables/columns if class has new fields “create” – Drop any existing and create new (only at start of session) “create-drop” – Same as create but also drop at end of session
JAVACUP.ir
![Page 42: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/42.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
42
Caveats of hbm2ddl.auto Some people don’t recommend
“update” can mess up Doesn’t remove renamed columns/attributes
Makes new one by default unless you update mapping Migrations not perfect
Suppose add not null constraint after the fact Existing nulls would blow up
Not recommended for production use anyway
Hibernate class tools like SchemaExport and SchemaUpdate Useful for getting auto-generated SQL migration/creation
scripts When set to “create” or “create-drop”
hbm2ddl.import_file – allow specifying /path/somefile.sql to run (used to be hard coded “/import.sql”) Needs to be in classpath
JAVACUP.ir
![Page 43: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/43.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
43
hibernate.cfg.xml (4)<!-- Names the annotated entity class --><mapping
class="org.hibernate.tutorial.annotations.Event"/>
For each class with annotations you provide a <mapping/> entry
For each .hbm.xml it looks like this instead <mapping resource="org/hibernate/tutorial/domain/
Event.hbm.xml"/> Event.hbm.xml is in the classpath No *.hbm.xml is possible, sorry. See persistence.xml for
wildcards or programmatic configuration.
JAVACUP.ir
![Page 44: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/44.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
44
persistence.xml JPA 2 XML method
Similar idea to hibernate.cfg.xml Additions
Allows defining EJB Persistence provider Usually HibernatePersistence suffices
jar-file option Allows auto-inclusion of any classes with annotations
No need for manual mapping like hibernate.cfg.xml Also auto-includes any .hbm.xml files
JAVACUP.ir
![Page 45: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/45.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
45
Programmatic ConfigurationConfiguration cfg = new Configuration();cfg.addResource("Item.hbm.xml");cfg.addResource("Bid.hbm.xml");
Assumes the .hbm.xml are in the classpath This example assumes the root
JAVACUP.ir
![Page 46: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/46.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
46
Programmatic Configuration (2)Configuration cfg = new Configuration();cfg.addClass(org.hibernate.auction.Item.class);cfg.addClass(org.hibernate.auction.Bid.class);
Translates to “/org/hibernate/auction/Item.hbm.xml” Again in classpath Avoids hardcoded filenames (less work than
updating hibernate.cfg.xml) If class is annotated uses annotation versus
xml
JAVACUP.ir
![Page 47: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/47.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
47
Programmatic Configuration (3)Configuration cfg = new Configuration() .addClass(org.hibernate.auction.Item.class) .addClass(org.hibernate.auction.Bid.class) .setProperty("hibernate.dialect",
"org.hibernate.dialect.MySQLInnoDBDialect") .setProperty("hibernate.connection.datasource",
"java:comp/env/jdbc/test") .setProperty("hibernate.order_updates", "true");
Database settings can be configured as well Note the “hibernate.” prefix on the options this time
JAVACUP.ir
![Page 48: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/48.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
48
Programmatic Configuration (4)Configuration conf = new Configuration();conf.configure().setProperty(“hibernate.connection.url”,
“jdbc:mysql://”+host+”/”+dbname);
conf.setProperty(“hibernate.connection.username”, user);
conf.setProperty(“hibernate.connection.password”, password);
Load /hibernate.cfg.xml as defaults Mappings still defined inside XML
Override database settings with run-time valuesJAVACUP.ir
![Page 49: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/49.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
49
Mapping & Configuration Summary Each Java class
Annotations or XML mapping file (.hbm.xml) or JPA persistence orm.xml You can mix annotations and XML mappings
Hibernate XML Configuration Each class/.hbm.xml gets <mapping/> entry Configure database hibernate.cfg.xml
or for JPA use persistence.xml Alternative
Programmatic configuration Hybrid approach
JAVACUP.ir
![Page 50: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/50.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
50
Initializing Hibernate
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
SessionFactory returned is used later
Code from documentation at http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#tutorial-firstapp-helpers
JAVACUP.ir
![Page 51: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/51.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
51
Saving DataSession session =
HibernateUtil.getSessionFactory().getCurrentSession();session.beginTransaction();
Event theEvent = new Event();theEvent.setTitle(title);theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
Just start a transaction similar to how you do in databases
JAVACUP.ir
![Page 52: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/52.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
52
Loading DataSession session =
HibernateUtil.getSessionFactory().getCurrentSession();session.beginTransaction(); // important even for queryList result = session.createQuery("from
Event").list();session.getTransaction().commit();return result;
Note the “from Event” which is SQL like Known as HQL More complex queries possible See
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html
JAVACUP.ir
![Page 53: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/53.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
53
Hibernate Session
JAVACUP.ir
A Session is used to get a physical connection with DB The Session object is lightweight designed to be instantiated each time an interaction is
needed with DB Persistent objects are saved and retrieved through a
Session object Session vs. DB connection Every object that is loaded by Hibernate from the
database is associated with the session Allowing Hibernate to automatically persist objects that are
modified Allowing Hibernate to implement functionality such as lazy-
loading
![Page 54: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/54.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
54
Sessions and Threads
JAVACUP.ir
Hibernate sessions are not thread-safe you shouldn't pass a Hibernate session into a
new thread you must not share Hibernate-managed
objects between threads Spring's transaction management places the
Hibernate session in a ThreadLocal variable accessed via the sessionFactory DAOs use that ThreadLocal When you create a new thread you no longer have
access to the Hibernate session for that thread
![Page 55: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/55.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
55
OpenSessionInView Filter
JAVACUP.ir
The SessionInViewFilter Opens a Hibernate session which is then
available for the entire web request
The pattern has pros and cons
![Page 56: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/56.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
56
Querying Data Remember don’t use string concatenation to form
queries Bad: “from Users where id=” + paramUserId Why? SQL Injection Vulnerabilities
paramUserId = “1 OR 1=1”
Use Queries instead List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, max) ) .list(); http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/
#querycriteria List cats = session.createQuery(
“from Cat as cat where cat.birthdate < ?“) .setDate(0, date) .list(); http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/
#objectstate-querying JAVACUP.ir
![Page 57: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/57.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
57
Closing ConnectionsessionFactory.close();
Closes resources Connection pools Caches Etc.
JAVACUP.ir
![Page 58: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/58.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
58
Session and Thread Safety org.hibernate.Session
Don’t use the deprecated class org.hibernate.classic.Session
NOT thread safe Each thread should call
SessionFactory.getCurrentSession() Versus .openSession() which has
No automatic close management No automatic association to a thread
JAVACUP.ir
![Page 59: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/59.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
59
HQL
JAVACUP.ir
Hibernate Query Language Currently a superset of JPQL Select, insert, delete, update queries SQL-Similar syntax With most of its features
Join Order Group Aggregations …
![Page 60: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/60.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
60
HQL (Examples)
JAVACUP.ir
from Cat select cat.mate from Cat cat select cat.name from DomesticCat cat where
cat.name like 'fri%‘ select avg(cat.weight), sum(cat.weight) from
Cat cat
HQL is OO The names are properties (not columns)
![Page 61: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/61.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
61
Find by Criteria
JAVACUP.ir
Criteria criteria = session.createCriteria(Person.class);SimpleExpression like = Restrictions.like("firstName", "%i%");Criteria exampleCriteria = criteria.add(like);List<Person> list = exampleCriteria.list();for (Person person2 : list) { System.out.println(person2.getFirstName());}
![Page 62: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/62.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
62
Restrictions
JAVACUP.ir
Eq Gt Le Like And Or …
![Page 63: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/63.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
63
Find by Examples
JAVACUP.ir
Person person = new Person();person.setNationalCode(123);person.setFirstName("Taghi");person.setLastName("Taghavi");Criteria criteria = session.createCriteria(Person.class);Criteria exampleCriteria = criteria.add(Example.create(person));List<Person> list = exampleCriteria.list();for (Person person2 : list) { System.out.println(person2.getFirstName());}
![Page 64: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/64.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
64
Associations Mapping
JAVACUP.ir
One-to-One One-to-Many Many-to-One Many-to-Many
Examples?
![Page 65: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/65.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
65
Many-to-One
JAVACUP.ir
![Page 66: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/66.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
66
Many-to-one (cont’d)
JAVACUP.ir
+ getters and setters
![Page 67: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/67.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
67
May-to-One by Annotation
JAVACUP.ir
@Entity @Table(name="cats") public class Cat {@ManyToOne @JoinColumn(name="mother_id") public Cat getMother() { return mother; }…
![Page 68: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/68.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
68
One-to-One
JAVACUP.ir
similar to many-to-one association the column will be set as unique E.g. an address associated with a single
employee Applications?
![Page 69: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/69.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
69
One-to-Many
JAVACUP.ir
![Page 70: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/70.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
70
One-to-Many (cont’d)
JAVACUP.ir
public class Product { private String serialNumber; private Set<Part> parts;
public String getSerialNumber() {return serialNumber; } void setSerialNumber(String sn) { serialNumber = sn; }
public Set<Part> getParts() { return parts; } void setParts(Set parts) { this.parts = parts; }
}
![Page 71: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/71.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
71
One-to-Many by Annotations
JAVACUP.ir
@Entity public class Product {
private String serialNumber; private Set<Part> parts;
@Id public String getSerialNumber() {return serialNumber; } void setSerialNumber(String sn) { serialNumber = sn; }
@OneToMany @JoinColumn(name="PART_ID") public Set<Part> getParts() { return parts; } void setParts(Set parts) { this.parts = parts; }
}
![Page 72: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/72.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
72
Many-to-Many
JAVACUP.ir
@Entity public class Store {
@ManyToManypublic Set<City> getCities() { ... }
}
@Entity public class City { ... //no bidirectional relationship }
![Page 73: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/73.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
73
Many-to-Many (cont’d)
JAVACUP.ir
![Page 74: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/74.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
74
Collection Mapping Types
JAVACUP.ir
java.util.Set mapped with a <set> element, initialized with
HashSet java.util.SortedSet
mapped with a <set> element, initialized with java.util.TreeSet.
The sort attribute java.util.List
mapped with a <list> element, initialized with java.util.ArrayList
![Page 75: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/75.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
75
Collection Mapping Types (cont’d)
JAVACUP.ir
java.util.Collection mapped with a <bag> or <ibag> element ,
initialized with ArrayList java.util.Map
mapped with a <map> element initialized with java.util.HashMap
java.util.SortedMap mapped with a <map> element initialized with java.util.TreeMap. The sort attribute
![Page 76: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/76.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
76
Cascade
JAVACUP.ir
Cascades the operation to the children Cascade-types:
none Save-update Delete Delete-orphan …
![Page 77: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/77.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
77
Example: cascade=save-update
JAVACUP.ir
Saves some stockDailyRecords too
![Page 78: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/78.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
78
Example: cascade=delete
JAVACUP.ir
![Page 79: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/79.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
79
Example: cascade=delete-orphan
JAVACUP.ir
![Page 80: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/80.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
80
Lazy collection fetching
JAVACUP.ir
A collection is fetched when the application invokes an operation upon that collection
This is the default for collections
lazy=true | false
![Page 81: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/81.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
81
Data Access Object Pattern (DAO)
JAVACUP.ir
![Page 82: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/82.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
82
DAO Abstracts the details of the underlying
persistence mechanism Hides the implementation details of the data
source from its clients Loose coupling between core business logic
and persistence mechanism
JAVACUP.ir
![Page 83: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/83.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
83
DAO: Example
JAVACUP.ir
![Page 84: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/84.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
84
Hibernate + Spring
JAVACUP.ir
Springs helps you write hibernate codes better and simpler
In creating and managing objects (beans) Datasource SessionFactory Sessions
In Transaction Management
![Page 85: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/85.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
85
Spring Integration: 1. Write Entity Classes
JAVACUP.ir
![Page 86: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/86.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
86
Spring Integration: 2. DOA interfaces
JAVACUP.ir
![Page 87: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/87.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
87
Spring Integration: 3. DAO implementations
JAVACUP.ir
![Page 88: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/88.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
88
Spring Integration: 4. Service (Manager, Business) interface
JAVACUP.ir
![Page 89: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/89.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
89
Spring Integration: 5. Service implementation
JAVACUP.ir
![Page 90: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/90.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
90
Spring Integration: 6. Spring configuration (1)
JAVACUP.ir
![Page 91: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/91.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
91
Spring Integration: 6. Spring configuration (2)
JAVACUP.ir
![Page 92: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/92.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
92
Spring Integration: 6. Spring configuration (3)
JAVACUP.ir
![Page 93: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/93.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
93
Spring Integration: 6. Spring configuration (4)
JAVACUP.ir
![Page 94: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/94.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
94
Spring Integration: 6. Spring configuration (5)
JAVACUP.ir
Define beans DAO beans Service beans
By XML or annotations
![Page 95: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/95.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
95
Spring Integration: 7. Using the service (manager) beans
JAVACUP.ir
![Page 96: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/96.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
96
Generic DAO
JAVACUP.ir
The problem with many DAO implementations Similar methods for
Load Save, update, delete Search
The solution?
![Page 97: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/97.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
97
Generic DAO (cont’d)
JAVACUP.ir
![Page 98: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/98.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
98
Hibernate Alternatives
JAVACUP.ir
ORM Enterprise JavaBeans (Entity Beans) Java Data Objects (JDO) Castor Spring DAO
Other JPA implementations TopLink , OpenJPA, …
![Page 99: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/99.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
99
Some Notes about Data Access Layer
JAVACUP.ir
Database and JCR Adaptive Data Modeling
![Page 100: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/100.jpg)
Contents redistribution is allowed if JAVACUP is noted as the source
100
References and Material
JAVACUP.ir
Hibernate Documentation http://www.hibernate.org/docs
Tutorialspoint.com http://www.tutorialspoint.com/hibernate/
![Page 101: Enterprise Application Development Sadegh Aliakbary An Introduction to Hibernate Framework www. JavaCup.ir](https://reader035.vdocuments.site/reader035/viewer/2022081514/56649dba5503460f94aab4c9/html5/thumbnails/101.jpg)