1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100287.html;106,k100287.html;107,k100289.html;108,k100292.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100289.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">Kapitel 45 - Objektorientierte Persistenz
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id045001"></a>
<h2>45.1 Einleitung </h2>
<hr>
<ul>
<li><a href="k100288.html#sectlevel2id045001">45.1 Einleitung</a>
<ul>
<li><a href="k100288.html#sectlevel3id045001001">45.1.1 Bezug und Installation</a>
</ul>
</ul>
<hr>
<p>
In <a href="k100265.html#kapiteljdbc">Kapitel 42</a> haben wir gesehen,
wie wir mit Hilfe von Datenbank-Treibern und der Abfragesprache SQL
Relationale Datenbanken mit Javaprogrammen verknüpfen und Daten
Ein- bzw. Auslesen können. Vielleicht ist Ihnen dabei aufgefallen,
dass die serielle Art und Weise des Zugriffs auf Relationale Datenbanken
nicht so recht mit der objektorientierten Programmierung harmonisiert.
Man spricht in diesem Fall auch von einem <a name="ixa103331"><i>Impedance Mismatch</i></a>.
<p>
Über die Jahre hinweg entwickelte sich deshalb eine weitere Technik,
die eine objektorientierte Verknüpfung von Datenbanken und Programmiersprachen
gestattet und unter dem Namen <a name="ixa103332"><i>Object Relational Mapping</i></a>
(<a name="ixa103333"><i>ORM</i></a>) bekannt wurde. Zwar basiert der
Zugriff auf die im Hintergrund arbeitende Datenbank dabei weiterhin
auf JDBC und SQL. Nun kommt jedoch eine objektorientierte Zugriffsschicht
dazu, mit der die Datenbank-Informationen in Javaobjekte überführt
und dem Entwickler zur Verfügung gestellt werden.
<p>
<a name="persistenceimg"></a>
<img src="images/Persistence.gif">
<p>
<p><i>
Abbildung 45.1: Datenbankzugriff mit JDBC und ORM</i></p>
<p>
Statt langwieriger SQL-Zugriffe und Transformation eines <font color="#000077"><tt>ResultSet</tt></font>
in Java-Objekte, kann der Entwickler diese nun einfach direkt Laden
oder Erzeugen und die Fließbandarbeit dem Persistenz API überlassen.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Das in diesem Kapitel vorgestellte Java Persistenz API (JPA) ist seit
dem JDK 5 Bestandteil von Java und vereinigt die Frameworks der <a name="ixa103334"><i>Java
Data Objects</i></a> (JDO) und der <a name="ixa103335"><i>Entity Bean</i></a>s
(EJB). Während erstere für die Java Standard Edition zugeschnitten
waren, konnten die leistungsfähigeren EJBs nur in einem J2EE
Application Server zur Ausführung gebracht werden. Die neue Technologie
vereint nun die Vorteile beider Welten und lässt sich sowohl
mit der Standard Edition als auch mit der Enterprise Edition verwenden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
<tr>
<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Da das Java Persistenz API gleich zwei weit entwickelte Technologien
vereint, deren Anwendungsgebiet vor allem in großen und komplexen
J2EE-Applikationen liegt, gehen die Möglichkeiten dieses Frameworks
weit über die Java Standard Edition hinaus. Insofern soll dieses
Kapitel vor allem eine neue Technologie vorstellen und den Leser anregen,
sich möglicherweise tiefer mit dieser zu beschäftigen. Eine
vollständige Einführung würde den Rahmen dieses Buches
bei weitem sprengen.
<p>
Sollten Sie kein Interesse an einer weiteren Zugriffsschicht für
Datenbanken haben, können Sie dieses Kapitel auch überspringen
und direkt zu <a href="k100292.html#kapitelnetzwerkprogrammierung">Kapitel 46</a>
übergehen. </td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF"> Hinweis </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<!-- Section -->
<a name="sectlevel3id045001001"></a>
<h3>45.1.1 Bezug und Installation </h3>
<p>
Das Persistenz API ist noch kein fester Bestandteil der Java Standard
Edition, sondern kann von der Homepage <a href="http://java.sun.com/javaee/technologies/persistence.jsp">http://java.sun.com/javaee/technologies/persistence.jsp</a>
heruntergeladen werden. Ähnlich wie mit JDBC liefert Sun mit
dem Java Persistenz API dabei zunächst nur einen Satz standardisierter
Schnittstellen, die anschließend von einer Implementierung ausgefüllt
werden müssen.
<p>
Zum Glück gibt es eine Reihe freier OpenSource-Implementierungen.
So etwa das in diesem Buch verwendete Hibernate-Framework, das sich
auch auf der beiliegenden DVD findet oder von der Homepage <a href="http://www.hibernate.org">http://www.hibernate.org</a>
heruntergeladen werden kann. Ähnlich wie beim Datenbank-Treiber
ist es hierbei wichtig, dass die Klassen der Implementierung (JAR-Dateien)
im Classpath des Programms enthalten und damit dem Java-Programm bekannt
sind.
<p>
Um die in diesem Kapitel vorgestellten Beispiele auszuführen,
können wir einfach die auf der DVD im Ordner <font color="#660099">install/persistenz</font>
hinterlegten JAR-Archive in den Classpath integriert werden. Sollten
Sie das Framework stattdessen von der Homepage herunterladen, so benötigen
Sie die Pakete <i>Core</i> und <i>Annotations</i> des Hibernate-Projektes.
Die Verwendung des Classpath wird unter anderem in <a href="k100087.html#sectionclasspath">Abschnitt 13.4.1</a>
vorgestellt.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Genaugenommen stand das Hibernate-Framework bei der Entwicklung des
Persistenz API sogar Pate. Viele Aspekte wurden zunächst in diesem
Framework verwirklicht und erst im Nachhinein von Sun adaptiert. So
könnte man das Hibernate-Framework sogar ohne den »Aufsatz«
der Persistenz API verwenden. Oder die »unter der Haube«
des JPA verwendete Implementierung einfach gegen eine andere austauschen.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF"> Hinweis </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
Als Datenbank soll auch in diesem Kapitel die bereits bekannte HSQLDB
mit den Tabellen der <i>DirDB</i> dienen, die in <a href="k100268.html#dirdb">Abschnitt 42.3</a>
beschrieben wurde. Doch anstatt die Einträge über Verzeichnisse
und Dateien mit SQL auszulesen, werden wir uns in diesem Kapitel entsprechender
Javaobjekte bedienen.
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100289.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|