Stephan Metzler
IT Consulter
Java Hibernate Framework und Persistence API
Referent:
Email:
Stephan Metzler
s.metzler@eurolink.ch
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