java data persistence using hibernate jack gardner october 2004

25
Java Data Persistence Using Hibernate Jack Gardner October 2004

Upload: beatrix-jacobs

Post on 20-Jan-2016

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Data Persistence Using Hibernate Jack Gardner October 2004

Java Data Persistence Using Hibernate

Jack Gardner

October 2004

Page 2: Java Data Persistence Using Hibernate Jack Gardner October 2004

2

Overview

What is Hibernate What is ORM Create Example Read Examples Persistable Classes Database Table Mapping Class to Table Configuration Configuration Properties

Session Transaction Object Lifecycle Query Options Associations References

Page 3: Java Data Persistence Using Hibernate Jack Gardner October 2004

3

What is Hibernate?

An object/relational mapping (ORM) implementation

Open source Development started late 2001

Page 4: Java Data Persistence Using Hibernate Jack Gardner October 2004

4

What is Object/Relational Mapping?

Provides a transparent bridge between objects and database tables

Allows source code to work with objects and their attributes vs. tables and columns

Eliminates need for most/all SQL Eliminates use of query result sets

Page 5: Java Data Persistence Using Hibernate Jack Gardner October 2004

5

Create Example

// create a new objectWidget w = new Widget();w.setName(“WidgetA”);w.setValue(10);

// persist itsession.save(w);

Page 6: Java Data Persistence Using Hibernate Jack Gardner October 2004

6

Read Examples

// get a known widgetWidget w = (Widget) session.load(Widget.class,

“WidgetA”);

// get all widgetsList widgets = session.find(“from Widget”);

Page 7: Java Data Persistence Using Hibernate Jack Gardner October 2004

7

Persistable Classes

Classes are simply JavaBeans

public class Widget{

private String name;private int value;

public Widget() {}public String getName() {return name;}public void setName(String s) {name = s;}public int getValue() {return value;}public void setValue(int i) {value = i;}

}

Page 8: Java Data Persistence Using Hibernate Jack Gardner October 2004

8

Database Table

Persistable classes have an associated table

Page 9: Java Data Persistence Using Hibernate Jack Gardner October 2004

9

Mapping Class to Table

widget.hbm.xml

<hibernate-mapping><class name=“mypackage.Widget” table=“WIDGET”>

<id name=“name” column=“NAME”> <generator class=“assigned”/></id><property name=“value” column=“VALUE”/>

</class></hibernate-mapping>

Page 10: Java Data Persistence Using Hibernate Jack Gardner October 2004

10

Configuration

import net.sf.hibernate.cfg.Configuration;import net.sf.hibernate.SessionFactory;

// build configuration based on propertiesConfiguration config = new Configuration();

// add persistable classes to configurationconfig.addClass(Widget.class);

// build a session factory based on configurationSessionFactory sessionFactory =

config.buildSessionFactory();

Page 11: Java Data Persistence Using Hibernate Jack Gardner October 2004

11

Configuration Properties

hibernate.propertieshibernate.dialect=net.sf.hibernate.dialect.Oracle9Dialecthibernate.connection.driver_class=oracle.jdbc.driver.OracleDriverhibernate.connection.url=jdbc:oracle:thin:@oracle.cis.ksu.edu:1521:ORACLEhibernate.connection.username=<myusername>hibernate.connection.password=<mypassword>

Page 12: Java Data Persistence Using Hibernate Jack Gardner October 2004

12

Session

Lightweight and inexpensive to create/destroy Not threadsafe – each thread needs its own Obtained from SessionFactory instance

Session session = sessionFactory.openSession();// perform persistence operationssession.close();

Page 13: Java Data Persistence Using Hibernate Jack Gardner October 2004

13

Transaction

Set of operations that are all committed or all rolled back

Obtained from Session instance Can perform multiple transactions within

session

Transaction tx = session.beginTransaction();// perform persistence operationstx.commit();

Page 14: Java Data Persistence Using Hibernate Jack Gardner October 2004

14

Object Lifecycle

Transient Newly created object

Persistent New object has been “saved” Previously saved object has been “read”

Detached Session closed Persistent object serialized Can be reattached later to become persistent

Page 15: Java Data Persistence Using Hibernate Jack Gardner October 2004

15

Query Options

Hibernate Query Language (HQL)Query q = session.createQuery(“from Widget w where w.value > :value”);q.setParameter(“value”, someValue);List widgets = q.list();

Criteria APICriteria c = session.createCriteria(Widget.class);c.add(Expression.gt(“value”, someValue);List widgets = c.list();

SQLQuery q = session.createSQLQuery(“select {w.*} from WIDGET {w} where VALUE > :value”, “w”, Widget.class);q.setParameter(“value”, someValue);List widgets = q.list();

Page 16: Java Data Persistence Using Hibernate Jack Gardner October 2004

16

Associations

Supports all association types one-to-one one-to-many many-to-many

Inherently unidirectional Supports bidirectional

Page 17: Java Data Persistence Using Hibernate Jack Gardner October 2004

17

One-to-Many Example: Unidirectional Option 1: Group Member

public class Group public class Member{ { private String name; private String name; private Collection members; … … }}

Option 2: Group Memberpublic class Group public class Member{ { private String name; private String name; … private Group group;} …

}

Page 18: Java Data Persistence Using Hibernate Jack Gardner October 2004

18

One-to-Many Example: Bidirectional Group Member

public class Group public class Member{ { private String name; private String name; private Collection members; private Group group; … …} }

Application responsible for maintaining each end of association

Page 19: Java Data Persistence Using Hibernate Jack Gardner October 2004

19

One-to-Many Table Structure

Underlying table structure not affected by directionality

Standard implementation Foreign key in many-side table

Alternate implementation Use join table, with no-duplicate constraint on

many-side foreign key

Page 20: Java Data Persistence Using Hibernate Jack Gardner October 2004

20

One-to-Many Table Structure

Page 21: Java Data Persistence Using Hibernate Jack Gardner October 2004

21

Many-to-Many Example: Unidirectional Option 1: Group Member

public class Group public class Member{ { private String name; private String name; private Collection members; … … }}

Option 2: Group Memberpublic class Group public class Member{ { private String name; private String name; … private Collection groups;} …

}

Page 22: Java Data Persistence Using Hibernate Jack Gardner October 2004

22

Many-to-Many Example: Bidirectional Group Member

public class Group public class Member{ {

private String name; private String name; private Collection members; private Collection

groups; … …

} }

Application responsible for maintaining each end of association

Page 23: Java Data Persistence Using Hibernate Jack Gardner October 2004

23

Many-to-Many Table Structure

Underlying table structure not affected by directionality

Implemented using join table

Page 24: Java Data Persistence Using Hibernate Jack Gardner October 2004

24

Many-to-Many Table Structure

Page 25: Java Data Persistence Using Hibernate Jack Gardner October 2004

25

References

Bauer, Christian and Gaven King, Hibernate in Action, Manning, 2005.

Hibernate Reference Documentation, Version 2.1.6, Hibernate, 2004.