Java Persistence API mit Hibernate Seminarunterlage Version: 6.01 Copyright ORDIX AG Version 6.01 vom 6. Dezember 2012 Dieses Dokument wird durch die ORDIX AG veröffentlicht. Copyright ORDIX AG. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Firmen und beziehen sich auf Eintragungen in den USA oder USA-Warenzeichen. Weitere Logos und Produkt- oder Handelsnamen sind eingetragene Warenzeichen oder Warenzeichen der jeweiligen Unternehmen. Kein Teil dieser Dokumentation darf ohne vorherige schriftliche Genehmigung der ORDIX AG weitergegeben oder benutzt werden. Adressen der ORDIX AG Die ORDIX AG besitzt folgende Geschäftsstellen ORDIX AG Westernmauer 12-16 D-33098 Paderborn Tel.: (+49) 0 52 51 / 10 63 - 0 Fax.: (+49) 01 80 / 1 67 34 90 ORDIX AG Kreuzberger Ring 13 D-65205 Wiesbaden Tel.: (+49) 06 11 / 7 78 40 – 00 Fax.: (+49) 01 80 / 1 67 34 90 ORDIX AG An der alten Ziegelei 5 D-48157 Münster Tel.: (+49) 02 51 / 9 24 35 – 00 Fax.: (+49) 01 80 / 1 67 34 90 ORDIX AG Wikingerstraße 18-20 D-51107 Köln Tel.: (+49) 02 21 / 8 70 61 – 0 Fax.: (+49) 01 80 / 1 67 34 90 ORDIX AG Marlene-Dietrich-Str. 5 D-89231 Neu-Ulm Tel.: (+49) 07 31 / 9 85 88 – 550 Fax.: (+49) 01 80 / 1 67 34 90 Internet: http://www.ordix.de Email: [email protected] Version: 6.01 Copyright ORDIX AG Seite 2 Java Persistence API mit Hibernate Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung ..................................................................................................................................... 7 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 2 Persistenz............................................................................................................................ 8 Persistenzschicht ................................................................................................................ 9 Problemstellung / Ziele...................................................................................................... 10 ORM – Objektrationales Mapping ..................................................................................... 11 Java Persistence API (JPA) .............................................................................................. 12 Hibernate ........................................................................................................................... 13 Charakteristik von Entities................................................................................................. 14 Transaktionalität ................................................................................................................ 15 Voraussetzungen .............................................................................................................. 16 Komponenten .................................................................................................................... 17 Vorgehensmodelle ............................................................................................................ 18 Architekturen einer Enterprise-Anwendung ...................................................................... 19 1.12.1 Zwei-Schichten-Architektur .................................................................................. 20 1.12.2 Drei-Schichten-Architektur ................................................................................... 21 1.12.3 Vier-Schichten-Architektur ................................................................................... 23 Schichten der JEE-Architektur .......................................................................................... 25 Schichten-Architekturen .................................................................................................... 26 Überblick der JEE-Architektur ........................................................................................... 29 Einordnung Hibernate / JPA.............................................................................................. 30 Konfiguration von Hibernate.............................................................................................. 32 Beispiel einer hibernate.properties ................................................................................... 33 Hibernate.cfg.xml .............................................................................................................. 34 Beispiel hibernate.cfg.xml (Mapping) ................................................................................ 35 Beispiel hibernate.cfg.xml (Datenbankeinstellungen) ....................................................... 36 Konfiguration zur Laufzeit ................................................................................................. 37 O/R-Mapping .............................................................................................................................. 38 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Mappingfiles ...................................................................................................................... 39 JPA-Konfiguration ............................................................................................................. 40 Mapping mit Annotationen ................................................................................................ 42 JPA / Entities ..................................................................................................................... 43 @Table .............................................................................................................................. 44 Multi-Table Mapping.......................................................................................................... 45 Zu persistierende Felder ................................................................................................... 47 2.7.1 @Transient ........................................................................................................... 48 2.7.2 @Basic ................................................................................................................. 49 2.7.3 @Column ............................................................................................................. 51 2.7.4 @Enumerated ...................................................................................................... 53 2.7.5 @Lob .................................................................................................................... 54 2.7.6 @Temporal........................................................................................................... 55 2.8 Primärschlüssel ................................................................................................................. 56 2.8.1 Einfache Primärschlüssel ..................................................................................... 57 2.8.2 Zusammengesetzte Primärschlüssel ................................................................... 59 2.9 Field/Method Access ......................................................................................................... 62 2.10 Persistieren von Objekten ................................................................................................. 64 2.11 Hibernate Tools ................................................................................................................. 65 3 Relationen .................................................................................................................................. 66 3.1 Relationen zwischen Entities ............................................................................................ 67 3.1.1 1:1 gerichtet.......................................................................................................... 68 3.1.2 1:1 ungerichtet...................................................................................................... 69 3.1.3 1:1 Varianten ........................................................................................................ 70 3.1.4 1:1 durch Einbettung ............................................................................................ 72 3.1.5 1:n gerichtet.......................................................................................................... 75 3.1.6 n:1 gerichtet.......................................................................................................... 76 3.1.7 1:n ungerichtet...................................................................................................... 77 Version: 6.01 Copyright ORDIX AG Seite 3 Java Persistence API mit Hibernate Inhaltsverzeichnis 3.2 3.3 4 Vererbung................................................................................................................................... 86 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 5 Vererbung bei Entities ....................................................................................................... 87 Strategien der Vererbung .................................................................................................. 88 Vererbungshierarchie ........................................................................................................ 89 SINGLE_TABLE ................................................................................................................ 90 TABLE_PER_CLASS........................................................................................................ 94 JOINED ............................................................................................................................. 97 Mapped Superclass ........................................................................................................ 100 Transiente Klassen ......................................................................................................... 104 Polymorphe Abfragen ..................................................................................................... 105 Polymorphe Assoziationen.............................................................................................. 108 Fallstricke ........................................................................................................................ 109 Arbeiten mit persistenten Objekten ...................................................................................... 111 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 6 3.1.8 1:n Varianten ........................................................................................................ 79 3.1.9 1:n Updates .......................................................................................................... 80 3.1.10 n:m gerichtet......................................................................................................... 81 3.1.11 n:m ungerichtet..................................................................................................... 82 Kaskadieren von Operationen .......................................................................................... 84 Mehrwertige Entity Assoziationen ..................................................................................... 85 Persistente Klassen ........................................................................................................ 112 Session............................................................................................................................ 113 SessionFactory ............................................................................................................... 114 Transaction ..................................................................................................................... 115 Ablauf .............................................................................................................................. 116 Der Entity Manager ......................................................................................................... 117 Exkurs: Lebenszyklen einer Entity .................................................................................. 119 Der Entity Manager ......................................................................................................... 121 Operationen .................................................................................................................... 122 Callbacks bei Entities ...................................................................................................... 123 JPQL Abfragen ................................................................................................................ 125 JPQL Vergleichsausdrücke ............................................................................................. 127 JPQL Aggregatfunktionen ............................................................................................... 128 Aufruf von Funktionen in JPQL ....................................................................................... 129 Übersicht der Funktionen in JPQL .................................................................................. 130 JPQL Queries .................................................................................................................. 131 Weitere native SQL-Abfragen ......................................................................................... 132 JPQL Result Typen ......................................................................................................... 133 Inner-Join ........................................................................................................................ 135 Left Outer Join ................................................................................................................. 136 Right Outer Join .............................................................................................................. 137 Full Outer Join ................................................................................................................. 138 JPQL Joins ...................................................................................................................... 139 Impliziter Assoziations-Join ............................................................................................. 140 Normaler Join in der FROM-Klausel ............................................................................... 141 Dynamisches Fetching mit Joins .................................................................................... 142 Joins im Theta-Stil........................................................................................................... 143 Subselects mit JPQL ....................................................................................................... 144 Paging ............................................................................................................................. 145 PersistenceUnitUtil, PersistenceUtil ................................................................................ 146 JPA 2.0 Criteria API ................................................................................................................. 147 6.1 6.2 6.3 6.4 6.5 6.6 6.7 Einführung ....................................................................................................................... 148 Metamodell-Klassen........................................................................................................ 151 Hibernate Metamodell Generator .................................................................................... 153 Pfad/Join Ausdrücke ....................................................................................................... 154 Bedingungen ................................................................................................................... 158 Parameter........................................................................................................................ 161 Rückgabewerte ............................................................................................................... 163 Version: 6.01 Copyright ORDIX AG Seite 4 Java Persistence API mit Hibernate Inhaltsverzeichnis 6.8 7 Fazit................................................................................................................................. 167 Grundlagen der JPA-Transaktions-API ................................................................................. 169 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 JPA-Transaktions-API ..................................................................................................... 170 Was ist eine Transaktion? ............................................................................................... 171 ACID-Eigenschaften........................................................................................................ 172 Isolation-Level ................................................................................................................. 173 Grundlegende Probleme ................................................................................................. 174 Probleme beim Konkurrenzzugriff ................................................................................... 175 Lösung der Probleme ...................................................................................................... 176 Grenzen einer Transaktion.............................................................................................. 177 Transaktionsmodelle ....................................................................................................... 178 Transaktionen und Applikationsserver ............................................................................ 179 EJBs und Transaktionen ................................................................................................. 180 Container-Managed Transactions (CMT) ....................................................................... 181 7.12.1 Methoden und Transaktionskontext ................................................................... 182 7.12.2 CMT – Transaktionsattribute .............................................................................. 183 7.12.3 CMT – Transaktionsgrenzen .............................................................................. 184 7.13 Bean-Managed Transactions (BMT) ............................................................................... 185 7.13.1 BMT – UserTransaction-Interface ...................................................................... 186 7.13.2 BMT – Programmbeispiel ................................................................................... 187 7.14 CMT oder BMT? .............................................................................................................. 188 8 Caching .................................................................................................................................... 189 8.1 8.2 8.3 8.4 9 Caching ........................................................................................................................... 190 Caching in Hibernate....................................................................................................... 191 8.2.1 Caching – First Level Cache .............................................................................. 192 8.2.2 First Level Cache ............................................................................................... 192 8.2.3 Beispiel für First Level Cache ............................................................................ 193 8.2.4 Cache Handling .................................................................................................. 194 8.2.5 Szenariobeschreibung........................................................................................ 195 8.2.6 Funktionsweise................................................................................................... 196 8.2.7 Laufzeitanalyse .................................................................................................. 198 Caches – Second Level Cache ....................................................................................... 199 8.3.1 Second Level Cache .......................................................................................... 199 8.3.2 Cache Provider................................................................................................... 200 8.3.3 Cache Mode ....................................................................................................... 201 8.3.4 Dirty Read .......................................................................................................... 202 8.3.5 Nonrepeatable Reads ........................................................................................ 203 8.3.6 Unterstütze Strategien........................................................................................ 204 8.3.7 Cache Handling .................................................................................................. 205 8.3.8 Konfiguration (Hibernate) ................................................................................... 206 8.3.9 Konfiguration (JPA) ............................................................................................ 207 8.3.10 Cache Provider konfigurieren - ehcache.xml ..................................................... 208 8.3.11 Cache Strategie festlegen .................................................................................. 209 8.3.12 Funktionsweise................................................................................................... 210 8.3.13 Laufzeitanalyse .................................................................................................. 212 8.3.14 Nachteile/Stolperfallen/Sonstiges ...................................................................... 213 8.3.15 EhCacheMonitor................................................................................................. 214 Caches – Query Cache ................................................................................................... 215 8.4.1 Grundlagen ......................................................................................................... 215 8.4.2 Konfiguration ...................................................................................................... 216 8.4.3 Funktionsweise................................................................................................... 217 8.4.4 Laufzeitanalyse .................................................................................................. 219 8.4.5 Nachteile/Stolperfallen/Sonstiges ...................................................................... 220 8.4.6 Zusammenfassung ............................................................................................. 221 Fortgeschrittene Themen ....................................................................................................... 222 9.1 9.2 Der Lebenszyklus einer Entity ........................................................................................ 223 Detachment ..................................................................................................................... 225 Version: 6.01 Copyright ORDIX AG Seite 5 Java Persistence API mit Hibernate Inhaltsverzeichnis 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13 9.14 10 Open Session in View ............................................................................................................. 239 10.1 10.2 10.3 10.4 10.5 10.6 10.7 11 Annahmen ....................................................................................................................... 240 Problemstellung und Lösung .......................................................................................... 241 Vorgehensweise .............................................................................................................. 242 Implementierung ............................................................................................................. 243 Konfiguration ................................................................................................................... 244 Vorteile / Nachteile .......................................................................................................... 245 Alternativen ..................................................................................................................... 246 Validierung ............................................................................................................................... 247 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 12 Konkurrierende Änderungen ........................................................................................... 226 Optimistic Locking mit Feldvergleich ............................................................................... 227 Optimistic Locking mit Versionierung .............................................................................. 228 Fetching Strategien ......................................................................................................... 229 Laden von Assoziationen ................................................................................................ 230 Ladezeitpunkt von Assoziationen ................................................................................... 231 N+1 Select Problem ........................................................................................................ 232 Optimierung ..................................................................................................................... 234 Log4jdbc .......................................................................................................................... 235 Setzen der Fetch Strategie ............................................................................................. 236 Besonderheiten bei Lazy Fetching .................................................................................. 237 Dynamic Insert/Update.................................................................................................... 238 Allgemeines ..................................................................................................................... 248 Beispiel ............................................................................................................................ 249 Vordefinierte Constraints................................................................................................. 250 Benutzerdefinierte Constraints ........................................................................................ 252 Kaskadierung .................................................................................................................. 253 Validierungsgruppen – Definition .................................................................................... 254 Validierungsgruppen – Anwendung ................................................................................ 255 Implizite Validierung in JPA............................................................................................. 256 Weitere Konfigurationsmöglichkeiten.............................................................................. 257 Explizite Validierung ........................................................................................................ 258 XML-Konfiguration .................................................................................................................. 259 12.1 12.2 12.3 12.4 12.5 12.6 Einsatz von XML-Konfigurationen ................................................................................... 260 persistence.xml ............................................................................................................... 261 entity-mappings ............................................................................................................... 262 entity ................................................................................................................................ 264 attributes.......................................................................................................................... 265 Beispiel ............................................................................................................................ 266 Version: 6.01 Copyright ORDIX AG Seite 6 Java Persistence API mit Hibernate