Objekt-relationales Mapping mit Hibernate

Werbung
Objekt-relationales Mapping mit Hibernate
Michael Eckel
FH Gießen-Friedberg
3. Juni 2008
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Inhaltsverzeichnis
1
Einführung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Inhaltsverzeichnis
1
Einführung
2
Theoretische Grundlagen von ORM
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Inhaltsverzeichnis
1
Einführung
2
Theoretische Grundlagen von ORM
3
Grundlagen von Hibernate
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Inhaltsverzeichnis
1
Einführung
2
Theoretische Grundlagen von ORM
3
Grundlagen von Hibernate
4
Ein Hibernate-Projekt durchführen
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Inhaltsverzeichnis
1
Einführung
2
Theoretische Grundlagen von ORM
3
Grundlagen von Hibernate
4
Ein Hibernate-Projekt durchführen
5
Zusammenfassung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
I
Wie kann man Daten in einer Java-Anwendung dauerhaft
speichern?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
I
Wie kann man Daten in einer Java-Anwendung dauerhaft
speichern?
I
Objekte sind transient
I
Sollen aber persistent sein
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
I
Wie kann man Daten in einer Java-Anwendung dauerhaft
speichern?
I
Objekte sind transient
I
Sollen aber persistent sein
I
Datenbanken haben sich bewährt
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
2 Arten von Datenbanken:
1
Objektorientierte Datenbanken (OODB)
2
Relationale Datenbanken (rel. DB)
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
2 Arten von Datenbanken:
1
Objektorientierte Datenbanken (OODB)
2
Relationale Datenbanken (rel. DB)
performanter
Basis: mathematische Theorie der Relationen
⇒ sehr robust
I
I
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Wie speichert man Objekte in einer rel. DB?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Wie speichert man Objekte in einer rel. DB?
I
einfache Objekte sind kein Problem
I Objekt-Attribut → Tabellenspalte
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Wie speichert man Objekte in einer rel. DB?
I
einfache Objekte sind kein Problem
I Objekt-Attribut → Tabellenspalte
I
Wie sieht es aus mit . . .
I
I
I
. . . zusammengesetzten Objekten?
. . . Objekt-Netzwerken?
. . . Vererbung?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Wie speichert man Objekte in einer rel. DB?
I
einfache Objekte sind kein Problem
I Objekt-Attribut → Tabellenspalte
I
Wie sieht es aus mit . . .
I
I
I
I
. . . zusammengesetzten Objekten?
. . . Objekt-Netzwerken?
. . . Vererbung?
keine Unterstützung durch rel. DBs
⇒ Objekt-relationale Paradigmen-Unvereinbarkeit
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Lösungen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Lösungen?
1
handgeschriebene Persistenz-Schicht
I
I
schwer wartbar
fehleranfällig
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Lösungen?
1
handgeschriebene Persistenz-Schicht
I
I
2
schwer wartbar
fehleranfällig
objekt-relationales Mapping (ORM)
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Lösungen?
1
handgeschriebene Persistenz-Schicht
I
I
2
schwer wartbar
fehleranfällig
objekt-relationales Mapping (ORM)
I
komerzielle Tools
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Einführung
Um was geht es?
Lösungen?
1
handgeschriebene Persistenz-Schicht
I
I
2
schwer wartbar
fehleranfällig
objekt-relationales Mapping (ORM)
I
I
komerzielle Tools
Open Source: Hibernate
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Inhaltsverzeichnis
1
2
3
4
5
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Grundlagen von Hibernate
Verbindungspooling
Der Persistenz-Kontext
Ein Hibernate-Projekt durchführen
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Zusammenfassung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
Was ist Persistenz?
Was ist Persistenz?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
Was ist Persistenz?
Was ist Persistenz?
Definition
Persistenz, von lat. persistere: „verharren“
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
Was ist Persistenz?
Was ist Persistenz?
Definition
Persistenz, von lat. persistere: „verharren“
I
Daten dauerhaft speichern
I
in Java: Objekte dauerhaft speichern
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
I
Datenbanken
I
I
I
I
Vorteile sollten bekannt sein
gleichzeitiger Zugriff
Datenunabhängigkeit
...
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
I
Datenbanken
I
I
I
I
I
Vorteile sollten bekannt sein
gleichzeitiger Zugriff
Datenunabhängigkeit
...
Serialisierung
I
I
I
aktuellen Applikationszustand speichern
ganze Netzwerke von Objekten speichern
Interface Serializable
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
I
Datenbanken
I
I
I
I
I
Vorteile sollten bekannt sein
gleichzeitiger Zugriff
Datenunabhängigkeit
...
Serialisierung
I
I
I
aktuellen Applikationszustand speichern
ganze Netzwerke von Objekten speichern
Interface Serializable
Nachteile:
I
I
I
muss komplett deserialisiert werden
selektiver Zugriff auf Objekte nicht möglich
sehr unperformant in Datenbanken
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
I
XML
I
selektiver Zugriff möglich
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Persistenz-Mechanismen
I
XML
I
selektiver Zugriff möglich
Nachteile:
I
I
unterstützt keine Vererbung
hierarchisch 6= objektorientiert
(„objekt-hierarchische Paradigmen-Unvereinbarkeit“)
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Probleme beim ORM
I
Vererbung
I
Identität
I
Assoziationen
I
Datennavigation
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Vererbung
Beispiel
Wie kann man folgendes Klassendiagramm in einer rel. DB realisieren?
Mitarbeiter
# persNr : Integer
# name : String
Manager
abtNr : Integer
Michael Eckel
Ingenieur
gebiet : String
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Vererbung
Ansatz
Eine Tabelle für alle Klassen plus zugehörige Views für die Superklasse
und jede Subklasse.
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Vererbung
create table M (
persNr integer primary
key,
typ char(1) not null,
name varchar(40),
abtNr integer,
gebiet varchar(30)
);
create view Mitarbeiter as
select persNr, name
from M;
Michael Eckel
create view Manager as
select persNr, typ, name,
abtNr
from M
where Typ = ’M’;
create view Ingenieur as
select persNr, typ, name,
gebiet
from M
where Typ = ’I’;
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Identität
1
Java
I
I
Identität (prüfen mit ==)
Gleichheit (prüfen mit equals())
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Identität
1
Java
I
I
2
Identität (prüfen mit ==)
Gleichheit (prüfen mit equals())
rel. DB
I
Identität = Wert des Primärschlüssels einer Tabelle
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Identität
Beispiel (abgespecktes Online-Diskussions-Forum)
1
2
3
4
5
6
create table Benutzer (
loginname varchar(12) primary key,
vorname varchar(30),
nachname varchar(30),
email varchar(60)
);
7
8
9
10
11
12
create table Beitrag (
betreff varchar(20),
text varchar(100),
loginname varchar(12) references Benutzer (
loginname)
);
Was tun, wenn der Login-Name sich ändert?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Identität
I
Problem: loginname ändern ⇒ andere Tabellen auch ändern
I
Problem nicht direkt lösbar
I
Workaround/Lösung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Identität
I
Problem: loginname ändern ⇒ andere Tabellen auch ändern
I
Problem nicht direkt lösbar
I
Workaround/Lösung
I
I
I
Surrogatschlüssel (Ersatzschlüssel) einführen
auch in Java-Klassen mit aufnehmen
Getter- und Setter-Methoden definieren
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Identität
Lösungsmöglichkeit:
1
2
3
4
5
6
7
create table Benutzer (
benutzer_id bigint not null primary key,
loginname varchar(12) unique,
vorname varchar(30),
nachname varchar(30),
email varchar(60)
);
8
9
10
11
12
13
14
create table Beitrag (
beitrag_id bigint not null primary key,
betreff varchar(20),
text varchar(100),
benutzer_id bigint references Benutzer(benutzer_id)
);
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Mit Assoziationen verbundene Probleme
Java: Assoziation = Referenz (Zeiger) auf Objekt
rel. DB: Assoziation = Kopie von Fremdschlüssel
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Mit Assoziationen verbundene Probleme
Java: Assoziation = Referenz (Zeiger) auf Objekt
rel. DB: Assoziation = Kopie von Fremdschlüssel
I
1
2
3
many-to-many -Assoziation in Java
public class Buch {
private Set autoren;
}
4
5
6
7
public class Autor {
private Set buecher;
}
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Mit Assoziationen verbundene Probleme
Java: Assoziation = Referenz (Zeiger) auf Objekt
rel. DB: Assoziation = Kopie von Fremdschlüssel
I
1
2
3
many-to-many -Assoziation in Java
public class Buch {
private Set autoren;
}
4
5
6
7
I
public class Autor {
private Set buecher;
}
many-to-many -Assoziation in rel. DB
I
Nur über Zwischentabelle möglich
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Datennavigation
I
Java
I
I
von Objekt zu Objekt navigieren.
Bsp: telefonbuch.getPerson("Meier").getTelNr()
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Datennavigation
I
Java
I
I
I
von Objekt zu Objekt navigieren.
Bsp: telefonbuch.getPerson("Meier").getTelNr()
rel. DB
I
I
Navigation spielt keine Rolle
beliebige Tabellen-Joins möglich
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Datennavigation
Lösungsversuch (Erster Gedanke)
Bei jedem Zugriff auf neues Objekt entsprechenden Datensatz aus der
Datenbank holen.
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Persistenz-Mechanismen
Probleme beim ORM
Das Problem der Datennavigation
Lösungsversuch (Erster Gedanke)
Bei jedem Zugriff auf neues Objekt entsprechenden Datensatz aus der
Datenbank holen.
I
Probleme
I
I
macht Vorteile des rel. DB-Systems kaputt (Joins)
n+1 selects-Problem ⇒ sehr ineffizient
I
effizienter: Tabellen-Joins
I
Man muss vorher wissen, auf was man zugreift
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Inhaltsverzeichnis
1
2
3
4
5
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Grundlagen von Hibernate
Verbindungspooling
Der Persistenz-Kontext
Ein Hibernate-Projekt durchführen
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Zusammenfassung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Grundlagen von Hibernate
Wo genau ist Hibernate anzuordnen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Grundlagen von Hibernate
Wo genau ist Hibernate anzuordnen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Grundlagen von Hibernate
Wo genau ist Hibernate anzuordnen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Grundlagen von Hibernate
Wo genau ist Hibernate anzuordnen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Grundlagen von Hibernate
Wo genau ist Hibernate anzuordnen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Verbindungspooling ohne Hibernate
nicht jedes mal eine neue Verbindung aufbauen
vorhandene Verbindungen nutzen
I Verbindungen nicht schließen, sondern an Pool zurückgeben
I
I
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Verbindungspooling ohne Hibernate
nicht jedes mal eine neue Verbindung aufbauen
vorhandene Verbindungen nutzen
I Verbindungen nicht schließen, sondern an Pool zurückgeben
I Warum?
I
I
I
I
Verbindungsaufbau kostet Zeit und Ressourcen
aufwändig für DB-System
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Verbindungspooling mit Hibernate
I
Hibernate übernimmt die Aufgabe des Poolings
I
Hibernate stellt verschiedene APIs zur Verfügung
Session: repräsentiert eine Arbeitseinheit der Datenbank
Transaction: Transaktionsgrenzen setzen
Query: Abfragen formulieren
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Verbindungspooling
Der Persistenz-Kontext
Der Persistenz-Kontext
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Inhaltsverzeichnis
1
2
3
4
5
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Grundlagen von Hibernate
Verbindungspooling
Der Persistenz-Kontext
Ein Hibernate-Projekt durchführen
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Zusammenfassung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Ein Hibernate-Projekt durchführen
I
Entwicklungsumgebung:
I
I
I
Eclipse 3.3 Europa
PostgreSQL 8.3
Hibernate Core 3.2.6
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Ein Hibernate-Projekt durchführen
I
Datenbank einrichten
I
Neues Projekt in Eclipse erstellen
I
relevante Hibernate-JAR-Dateien → lib-Verzeichnis
I
PostgreSQL-JDBC-Treiber (JAR) → lib-Verzeichnis
I
JAR-Dateien dem Java Build Path hinzufügen
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Klassenmodell
I
Folgendes Klassen-Modell („Dokumentenverwaltung“) liegt
zugrunde:
Benutzer
id : Long
loginName : String
email : String
Dokument
benutzer
id : Long
titel : String
version : Integer
dokumente[*]
I
dateiName : String
Zu den Klassen:
I
I
I
einfache POJOs
Getter- und Setter-Methoden
Default-Konstruktor
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Klassenmodell
Die Klasse Benutzer
1
2
3
4
5
public class Benutzer {
private Long id;
private String loginName;
private String email;
private Set dokumente = new HashSet();
6
public Benutzer() {
}
7
8
9
// Getter und Setter, weitere Konstruktoren
10
11
12
}
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Klassenmodell
Die Klasse Dokument
1
2
3
4
5
6
public class Dokument {
private Long id;
private String titel;
private Integer version;
private String dateiName;
private Benutzer benutzer;
7
public Dokument() {
}
8
9
10
// Getter und Setter, weitere Konstruktoren
11
12
13
}
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Die Mapping-Dateien
Die Datei Benutzer.hbm.xml (1)
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="de.fhgiessen.dbs">
<class name="Benutzer" table="benutzer">
<id name="id" column="benutzer_id">
<generator class="increment"/>
</id>
10
11
12
<property name="loginName" column="loginname"/>
<property name="email" column="email"/>
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Die Mapping-Dateien
Die Datei Benutzer.hbm.xml (2)
1
2
3
4
5
6
7
8
<set
name="dokumente">
<key column="benutzer_id"/>
<one-to-many class="Dokument"/>
</set>
</class>
</hibernate-mapping>
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Die Mapping-Dateien
Die Datei Dokument.hbm.xml
1
2
3
4
5
6
7
<!-- Header -->
<hibernate-mapping package="de.fhgiessen.dbs">
<class
name="Dokument" table="dokument">
<id name="id" column="dokument_id">
<generator class="increment"/>
</id>
8
9
10
11
<property name="titel" column="titel"/>
<property name="version" column="version"/>
<property name="dateiName" column="dateiname"/>
12
13
14
15
16
<many-to-one name="benutzer" column="benutzer_id"
insert="false" update="false"/>
</class>
</hibernate-mapping>
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Hibernate konfigurieren
Die Datei hibernate.cfg.xml (1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.
sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
org.postgresql.Driver
</property>
<property name="hibernate.connection.url">
jdbc:postgresql://localhost/dokuverw
</property>
<property name="hibernate.connection.username">
postgres
</property>
<property name="hibernate.connection.password">
postgres
</property>
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Hibernate konfigurieren
Die Datei hibernate.cfg.xml (2)
1
2
3
<property name="hibernate.dialect">
org.hibernate.dialect.PostgreSQLDialect
</property>
4
5
6
<!-- Tabellen automatisch erzeugen lassen -->
<property name="hibernate.hbm2ddl.auto">update</property>
7
8
9
10
11
12
13
<!-- Verwenden des C3P0 Connection Pool Providers -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</
property>
<property name="hibernate.c3p0.idle_test_period">3000</
property>
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Hibernate konfigurieren
Die Datei hibernate.cfg.xml (3)
1
2
3
4
<!-- Schoenes, sauberes SQL bei stdout ausgeben -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
5
6
7
8
9
10
<!-- Liste der XML-Mapping-Dateien -->
<mapping resource="de/fhgiessen/dbs/Benutzer.hbm.xml" />
<mapping resource="de/fhgiessen/dbs/Dokument.hbm.xml" />
</session-factory>
</hibernate-configuration>
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Hauptprogramm
Die Klasse MainKlasse (1)
1
2
3
4
5
public class MainKlasse {
public static void main(String[] args) {
// 1. Unit of Work beginnen
Session session = HibernateUtil.getSessionFactory().
openSession();
Transaction tx = session.beginTransaction();
6
7
8
9
10
11
12
13
// Dokumente anlegen und in Persistenz-Kontext aufnehmen
Dokument dok1 = new Dokument("Reise", new Integer(1), "
Reise.xml");
Dokument dok2 = new Dokument("Test", new Integer(6), "
test_doc.doc");
Dokument dok3 = new Dokument("Abrechnung", new Integer(2),
"abr.pdf");
session.save(dok1);
session.save(dok2);
session.save(dok3);
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Hauptprogramm
Die Klasse MainKlasse (2)
1
2
3
4
5
// Benutzer anlegen mit Dokument(en)
// und in Persistenz-Kontext aufnehmen
Benutzer ben1 = new Benutzer("peter", "[email protected]");
session.save(ben1);
ben1.getDokumente().add(dok1);
6
7
8
9
10
Benutzer ben2 = new Benutzer("hilde", "[email protected]");
session.save(ben2);
ben2.getDokumente().add(dok2);
ben2.getDokumente().add(dok3);
11
12
13
// Dokument aendern
dok1.setTitel("Geaendert");
14
15
16
17
// Transaktion bestaetigen und Session schliessen
tx.commit();
session.close();
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Hauptprogramm
Die Klasse MainKlasse (3)
1
2
3
// 2. Unit of Work beginnen
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Benutzer ausgeben
System.out.println("--- Benutzer -------------------------");
List benutzer = session.createQuery("from Benutzer").list();
for (Benutzer b : (List<Benutzer>) benutzer) {
// Benutzername, E-Mail-Adresse und ID ausgeben
System.out.println(" * " + b.getLoginName() +
" (" + b.getEmail() + ") [" + b.getId() + "]");
// Dokumente des Benutzers ausgeben
System.out.println("
* Dokumente:");
for (Dokument d : (Set<Dokument>)b.getDokumente()) {
// ...
}
}
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Das Hauptprogramm
Die Klasse MainKlasse (4)
// Dokumente ausgeben
System.out.println();
System.out.println("--- Dokumente ------------------------");
List dokumente = session.createQuery("from Dokument").list();
for (Dokument d : (List<Dokument>)dokumente) {
// Dokumenttitel, -dateiname und ID ausgeben
System.out.println(" * " + d.getTitel() +
" (" + d.getDateiName() + ") [" + d.getId() + "] {" +
d.getBenutzer().getLoginName() + "}");
}
// Transaktion bestaetigen und Session schliessen
tx.commit();
session.close();
// Programm beenden
HibernateUtil.shutdown();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
}
}
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Erzeugtes Datenbankschema
Folgendes Datenbankschema wurde von Hibernate erzeugt:
1
2
3
4
5
create table benutzer (
benutzer_id bigint not null primary key,
loginname varchar(255),
email varchar(255)
);
6
7
8
9
10
11
12
13
create table dokument (
dokument_id bigint not null primary key,
titel varchar(255),
version integer,
dateiname varchar(255),
benutzer_id bigint references benutzer (benutzer_id)
);
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Ausgabe des Hauptprogramms
Ausgabe von MainKlasse:
1
2
3
4
5
6
7
8
--- Benutzer ------------------------* peter ([email protected]) [37]
* Dokumente:
* Geaendert (Reise.xml)
* hilde ([email protected]) [38]
* Dokumente:
* Test (test_doc.doc)
* Abrechnung (abr.pdf)
9
10
11
12
13
--*
*
*
Dokumente -----------------------Geaendert (Reise.xml) [1] {peter}
Test (test_doc.doc) [2] {hilde}
Abrechnung (abr.pdf) [3] {hilde}
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Zusammenfassung
1
Einführung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Zusammenfassung
1
2
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Zusammenfassung
1
2
3
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Grundlagen von Hibernate
Verbindungspooling
Der Persistenz-Kontext
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Zusammenfassung
1
2
3
4
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Grundlagen von Hibernate
Verbindungspooling
Der Persistenz-Kontext
Ein Hibernate-Projekt durchführen
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Zusammenfassung
1
2
3
4
5
Einführung
Theoretische Grundlagen von ORM
Persistenz-Mechanismen
Probleme beim ORM
Grundlagen von Hibernate
Verbindungspooling
Der Persistenz-Kontext
Ein Hibernate-Projekt durchführen
Vorbereitung
Das Klassenmodell
Die Mapping-Dateien
Hibernate konfigurieren
Das Hauptprogramm
Zusammenfassung
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Literaturangaben
B AUER, Christian ; K ING, Gavin.
Java Persistence mit Hibernate.
Hanser Fachbuch, 2007 – ISBN 3-44640-9416.
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Fragen?
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Einführung
Theoretische Grundlagen von ORM
Grundlagen von Hibernate
Ein Hibernate-Projekt durchführen
Zusammenfassung
Danke für die Aufmerksamkeit!
Michael Eckel
Objekt-relationales Mapping mit Hibernate
Herunterladen