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