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