Java Persistence API mit Hibernate

Werbung
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
Herunterladen