Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Referent:
Email:
Stephan Metzler
[email protected]
Java EE 5
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Über mich …






IT Consulting
FH-Dozent Schwerpunkt J2EE / EJB / JPA
Autor diverser Schulungsunterlagen
Firmenschulungen
Fachvorträge
pers. Fokus :
Middle-Tier-Architekturen
und
O/R-Mapping
für
verteilte Softwaresysteme
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Motivation – JSR 220
 OOA Thematik – Annotations, Generics
 Begriffe eines O/R Mapping Frameworks
 Hibernate als O/R Mapping Framework
 Anwendungsbeispiel – Library
 Architektur von Hibernate
 Lebenszyklus anhand des Objektzustand
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Agenda
 Beziehungen – O vs R
 Collections
 Hibernate Session und Transaktionen
 Datenbankabfragen
 Hibernate Types
 Fetching und Caching
 Best Practice
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Buchempfehlung
 Java Persistence with Hibernate
Second Edition of Hibernate in Action
Christian Bauer and Gavin King
November, 2006 | 880 pages
ISBN: 1-932394-88-5
 Softbound print book
 PDF ebook
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Feingranulare Klassenarchitektur als eingebettete
Objekte (Embeddable Klassen).
 Address (street, city, etc) kapseln
 Widerverwendbarkeit
 Vereinfacht Refactoring
Comp
Company
- name: String
- address: Address
Address
- street: String
- city: String
NAME: VARCHAR
STREET: VARCHAR
CITY: VARCHAR
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Persistente Klassen mit Identifikation deklarieren
 Synthetic Keys (ohne Geschäftsrelevanz)
 non-Primitive Type (java.lang.Long oder java.lang.String)
@Id
@GeneratedValue
public Long getId() {
return this.id;
}
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Eigene Datei für jedes XML Mapping
 Keine monolithische Mapping Dateien
 Vereinfacht Teamumfeld
<hibernate-mapping package="library">
<class name="User" table="T_USER">
<id name="id">
<generator class="native"/>
</id>
<property name="firstname„ column="FIRSTNAME" length="32"/>
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 XML Mapping als Ressourcen laden
 Mapping Dateien zusammen mit POJOs deployen
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 SQL Strings aus Applikation auslagern
 Non ANSI Standard SQL Praxiserfarung
 unterstützt Portierbarkeit
SELECT …
<pojo>
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 JDBC Hibernate überlassen
 benutzerdefinierte JDBC Connection als letzter Ausweg
 Eigene Implementation als
net.sf.hibernate.connection.ConnectionProvider
JDBC
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Benutzerdefinierte Typen definieren
 Java Typ soll persistiert werden
(Auslagerung in Komponente ist nicht sinnvoll!)
 Implementierung eines net.sf.hibernate.UserType
 trennt Applikation und (Hibernate) Typen Transformation
UserType
<pojo>
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Direkte JDBC nur im Flaschenhals
 BULK-SQL können als direkte JDBC schneller sein
 mit Benchmark beweisen!
 (Hibernate)-Session bietet Transaktions-Strategy
<pojo>
Hibernate
JDBC
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Session Flushing
 Synchronisation mit der Datenbank beeinträchtigt
Performanz (Transktionsende / Querys / Session.flush())
 automatisches Session Flushing ausschalten
 Reihenfolge der Abfragen
 Reihenfolge von Operationen in Transaktionen
<pojo>

Session.flush()
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 bei Multi-Tier-Architektur saveOrUpdate() verwenden
 Session über Tiers transferieren
 für jeden Service Request eigene Session verwenden
 mit Session.saveOrUpdate() den persistenten Zustand eines
Objektes aktualisieren
CLIENT
WEB
LOGIC
Hibernate.Session
EIS
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 eigene Session pro Use Case
 kurze Datenbank Transaktion erhöht Skalierbarkeit
 Detached Objects verwenden
 Session schliessen
Session

Session
Session
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Hibernate Exceptions nicht "beheben"
 Transaktion zurückführen (Rollback)
 Session schliessen
 find() anstelle von load()
<pojo>
TRANSACTION
EXEPTION
ROLLBACK
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Thread Local Session Pattern
 Session durch Request assoziert
request
response
Servlet
Session
JSP
POJO
Filter
Session.close()
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Business Logik von Hibernate abstahieren
 Hibernate relevater Code in Interface auslagern




Thread Local Session Pattern
DAO in Kombination
Hibernate User Types
Benutzerdefinierte JDBC
BusinessObject
uses
DataAccessbject encapsulates
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 Equals() und hashCode() überschreiben
 Objektvergleich ausserhalb Session problematisch
 nie PK der Datenbank verwenden
@Override
 stattessen BK (Business Key) verwenden
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof User)) return false;
final User user = (User) obj;
return !(email != null ? !email.equals(user.email): user.email != null);
}
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Best Practice
 keine exotischen Beziehungen verwenden
 gute Use Cases definieren selten N:M Beziehungen
 oft zusätzliche Informationen in der Link Tabelle erwünscht
 zwei 1:N Beziehungen mit zusätzlicher Link Tabelle
ID
ID
Name
1
1
2
ID_Name
ID_Projekt
1
1
2
1
Start
2
Projekt
Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Lern-Ziel

Best Practice