Bernd Müller, Harald Wehr
Java Persistence API 2
Hibernate, EclipseLink, OpenJPA und Erweiterungen
Inhalt
6
Vorwort
14
1 Einführung
16
1.1 Motivation
16
1.1.1 De-facto-Standards
16
1.1.2 Zwei Welten treffen aufeinander
17
1.1.3 OR-Mapper etablieren sich
17
1.1.4 Aktualität und praktische Relevanz
18
1.2 JPA und JPA-Provider
18
1.2.1 JPA-Provider
18
1.2.2 Lizenzen
19
1.3 Über dieses Buch
19
1.3.1 Das Buch im Netz
19
1.3.2 Zur Sprache
20
1.3.3 Der Leser
20
1.3.4 Vollständigkeit
21
1.3.5 Beispielprogramme
22
1.3.6 Al, unser Strichmännchen
22
1.3.7 Die Struktur des Buches
23
2 Grundlegendes Mapping von Objekten
26
2.1 Primärschlüssel versus Objektidentität
26
2.1.1 Sequence-Generatoren
29
2.1.2 Table-Generatoren
31
2.2 POJO-Mapping
33
2.2.1 Was ist ein POJO?
34
2.2.2 Mapping-Optionen auf Entity-Ebene
35
2.2.3 Serialisierbarkeit von Entities
36
2.2.4 Der JPA-Zugriff auf Entity-Properties
37
2.2.5 Mapping-Optionen auf Property-Ebene
38
2.2.6 Die @Column-Annotation
43
2.3 Zusammengesetzte Schlüssel
46
2.3.1 Realisierung mit @IdClass
46
2.3.2 Realisierung mit @EmbeddedId
49
2.3.3 Realisierung mit @Embeddable
51
2.4 Mehrere Tabellen für ein Entity
52
3 Objektlebenszyklus
56
3.1 Der Zustand eines Entity
56
3.2 JPA in Java-SE-Anwendungen
57
3.2.1 Speichern von Entities
58
3.2.2 Laden von Entities
60
3.2.3 Aktualisieren von Entities
62
3.2.4 Löschen von Entities
64
3.2.5 Weitere Operationen auf Entities
64
3.2.6 Konfiguration
66
3.3 JPA in Java-EE-Anwendungen
68
3.3.1 Konfiguration
69
3.3.2 Speichern und Laden von Entities
72
3.3.3 Aktualisieren und Löschen von Entities
75
3.3.4 Der erweiterte Persistenzkontext
76
3.3.5 Analyse und Zusammenfassung
77
3.4 Callback-Methoden und Entity-Listener
78
3.4.1 Callback-Methoden
79
3.4.2 Entity-Listener
80
3.4.3 Default-Listener
81
3.4.4 Callbacks und Listener zur Validierung
83
3.5 Das neue Zustands-API
84
3.6 Das Packaging von Anwendungen
86
3.6.1 Packaging von Web-Anwendungen
86
3.6.2 Allgemeines Packaging
86
3.7 Mapping-Metadaten in XML
88
4 Objekte und Beziehungen
90
4.1 Standardbeziehungen
90
1:1-Beziehungen
91
Bidirektionale 1:1-Beziehungen
96
1:n- und n:1-Beziehungen
97
Bidirektionale 1:n-Beziehungen
99
n:m-Beziehungen
105
Bidirektionale n:m-Beziehungen
108
4.2 Andere Beziehungsarten
110
4.2.1 Assoziationsklassen
110
4.2.2 Rekursive Beziehungen
114
4.2.3 Geordnete Beziehungen
115
4.2.4 Beziehungen als Abbildungen
120
4.3 Wertemengen
121
4.3.1 Wertemengen ohne JPA
122
4.3.2 Einfache Datentypen
123
4.3.3 Einbettbare Datentypen
126
4.4 Beziehungen und Performanz
131
5 Vererbung
134
5.1 Eine Tabelle für eine Vererbungshierarchie
134
5.2 Eine Tabelle je Unterklasse
140
5.3 Eine Tabelle je konkreter Klasse
142
5.4 Vergleich der Vererbungsstrategien
144
5.4.1 Eine Tabelle für eine Vererbungshierarchie
144
5.4.2 Eine Tabelle je Unterklasse
145
5.4.3 Eine Tabelle je konkreter Klasse
145
5.5 Mapping von Oberklassen
145
5.6 Kombination von Vererbungsstrategien
147
6 Transaktionen
150
6.1 Probleme des Mehrbenutzerbetriebs
151
6.2 Isolation-Level
153
6.3 Transaktionen in der JPA
154
6.3.1 Konkurrierende Zugriffe
156
6.3.2 Optimistisches Locking
158
6.3.2.1 LockModeType.OPTIMISTIC
158
6.3.2.2 LockModeType.OPTIMISTIC_FORCE_INCREMENT
161
6.3.3 Pessimistisches Locking
161
6.3.3.1 LockModeType.PESSIMISTIC_READ
162
6.3.3.2 LockModeType.PESSIMISTIC_WRITE und LockModeType.PESSIMISTIC_FORCE_INCREMENT
162
6.3.3.3 Pessimistische Locks in der Praxis
162
6.3.4 Locks für Objekte erhalten
166
6.3.5 Caching
167
6.3.6 Vor- und Nachteile des Caching
172
6.4 Konversationen
173
7 JPQL (Java Persistence Query Language)
178
7.1 JPA-Query-Interfaces
179
7.1.1 Named Queries
182
7.1.2 Parameter für Abfragen
184
7.1.3 Direkte SQL-Abfragen
185
7.2 Elemente der Java Persistence Query Language (JPQL)
189
7.3 Die From-Klausel
189
7.3.1 Implizite Joins
190
7.3.2 Inner-Joins
190
7.3.3 Left-Joins
192
7.3.4 Fetch-Joins
193
7.3.5 Joins ohne definierte Mapping-Beziehungen
194
7.4 Selektionen mit Where
194
7.4.1 Unterabfragen (Subselects)
196
7.4.2 Funktionen
197
7.5 Projektionen mit Select
199
7.5.1 Aggregationsfunktionen
200
7.5.2 Gruppieren von Daten mit Group By und Having
201
7.5.3 Ergebnisse sortieren mit Order By
202
7.5.4 Konstruktoren im Select-Statement
203
7.6 Update- und Delete-Statements
203
7.7 Flush-Modi und Abfragen
205
8 Das Criteria-API
208
8.1 Der statische Zugriff
209
8.1.1 Grundsätze der Generierung
209
8.1.2 Manuelle und automatische Generierung
210
8.2 Abfragen mit der Criteria-API
213
8.2.1 Join-Bedingungen in der Criteria-API
213
8.2.2 Einschränkung der Ergebnismenge
216
8.2.3 Selektion der Ausgabe
217
8.2.4 Unterabfragen
221
8.2.5 Gruppierungen mit Group By und Having und Sortierungen mit Order By
223
8.2.6 Benutzung von datenbankspezifischen Funktionen
224
8.2.7 Modifikation von bestehenden Abfragen
224
8.3 Der dynamische Zugriff
225
9 Bean-Validierung mit JSR 303
228
9.1 Einfache Validierungen
228
9.2 Beziehungen und eingebettete Objekte
232
9.3 Konfiguration
234
9.4 Explizite Validierung
235
9.5 Validierungsgruppen
237
9.6 Anwendungsdefinierte Validierungs-Constraints
240
9.7 Validierung mit XML
241
10 JPA-Konfiguration
244
10.1 Persistenzeinheiten
244
10.2 Mapping-Dateien und Annotationen
247
10.2.1 Das Element
248
10.2.2 Das Element
249
10.2.3 Das Element
250
10.2.4 Das Element
250
10.2.5 Das Element
251
10.2.6 Das Element
252
10.2.7 Das Element
252
10.2.8 Das Element
253
10.2.9 Das Element
253
10.2.10 Das Element
255
10.2.11 Das Element
256
10.2.12 Das Element
256
10.2.13 Das Element
257
10.2.14 Das Element
257
10.2.15 Das Element
258
10.2.16 Das Element
258
10.2.17 Das Element
259
10.2.18 Das Element
260
10.2.19 Das Element
260
10.2.20 Das Element
261
10.2.21 Das Element
262
10.2.22 Das Element
263
10.2.23 Das Element
263
10.2.24 Das Element
264
10.2.25 Das Element
265
10.2.26 Das Element
265
10.2.27 Das Element
266
10.2.28 Die Elemente
und 267
10.2.29 Das Element
268
10.2.30 Das Element
269
10.2.31 Das Element
270
10.2.32 Das Element
270
10.2.33 Das Element
271
10.2.34 Das Element
271
10.2.35 Das Element
272
10.2.36 Das Element
272
10.2.37 Das Element
273
10.2.38 Das Element
273
10.2.39 Das Element
273
Die weiteren
-Elemente 274
11 Hibernate-Erweiterungen
276
11.1 Caching
277
11.1.1 Objekt-Cache
280
11.1.2 Query-Cache
282
11.2 Instrumentation
283
11.3 Hibernate-Search
285
11.3.1 Lucene
285
11.3.2 Konfiguration in Hibernate
286
11.3.3 Hibernate-Bridges
290
11.3.4 Abfragen mit der Lucene-Syntax
293
11.4 Envers
294
11.4.1 Einfache Auditierung
294
11.4.2 Auditieren von Beziehungen
297
11.4.3 Typische Anwendungsfälle
298
11.4.4 Die Auditierungsstrategie
300
12 EclipseLink-Erweiterungen
302
12.1 Caching
302
12.1.1 Objekt-Cache
304
12.1.2 Query-Cache
307
12.2 Weaving
308
12.3 Mandantenfähigkeit
310
13 OpenJPA-Erweiterungen
314
13.1 Caching
314
13.1.1 Object-Cache
315
13.1.2 Query-Cache
317
13.2 Enhancement
319
13.3 Slice
321
13.3.1 Konfiguration
321
13.3.2 Verteilungsstrategien
322
14 Ausblick auf JPA 2.1
326
Literaturverzeichnis
330
URL-Verzeichnis
332
Stichwortverzeichnis
334
© 2009-2024 ciando GmbH