summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100289.html
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100289.html
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100289.html')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/html/k100289.html680
1 files changed, 680 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100289.html b/Master/Reference Architectures and Patterns/hjp5/html/k100289.html
new file mode 100644
index 0000000..30e17ee
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/html/k100289.html
@@ -0,0 +1,680 @@
+<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,k100288.html;107,k100290.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">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100287.html">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100288.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100290.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
+<td align="right">Kapitel 45 - Objektorientierte Persistenz
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id045002"></a>
+<h2>45.2 Datenbank-Tabellen und Javaobjekte </h2>
+<hr>
+<ul>
+<li><a href="k100289.html#sectlevel2id045002">45.2 Datenbank-Tabellen und Javaobjekte</a>
+<ul>
+<li><a href="k100289.html#sectlevel3id045002001">45.2.1 Eine einfache Javaklasse f&uuml;r Tabellen</a>
+<li><a href="k100289.html#sectlevel3id045002002">45.2.2 Verkn&uuml;pfen der Javaklasse mit der Datenbank</a>
+<li><a href="k100289.html#sectlevel3id045002003">45.2.3 Konfiguration des Datenbank-Zugriffs</a>
+<ul>
+<li><a href="k100289.html#sectlevel4id045002003001">Aufbau der Konfigurationsdatei</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id045002001"></a>
+<h3>45.2.1 Eine einfache Javaklasse f&uuml;r Tabellen </h3>
+
+<p>
+Wenn wir uns an die Tabelle <font color="#000077"><tt>dir</tt></font>
+aus <a href="k100265.html#kapiteljdbc">Kapitel 42</a> erinnern, k&ouml;nnten
+wir auf die Idee kommen, dass diese auch durch eine Java Bean repr&auml;sentiert
+werden kann, deren Instanzen die Datens&auml;tze repr&auml;sentieren.
+Zur Erinnerung - und damit Sie nicht immer hin- und herbl&auml;ttern
+m&uuml;ssen - sei hier noch einmal die Tabellenstruktur angef&uuml;hrt:
+<a name="tableid045001"></a>
+<p>
+<table cols=3 border width=66%>
+
+<tr>
+<td valign=top align=left width=25%><b>Name </b></td>
+<td valign=top align=left width=25%><b>Typ </b></td>
+<td valign=top align=left width=50%><b>Bedeutung</b></td></tr>
+<tr>
+<td valign=top align=left>did </td>
+<td valign=top align=left>INT </td>
+<td valign=top align=left>Prim&auml;rschl&uuml;ssel</td></tr>
+<tr>
+<td valign=top align=left>dname </td>
+<td valign=top align=left>CHAR(100) </td>
+<td valign=top align=left>Verzeichnisname</td></tr>
+<tr>
+<td valign=top align=left>fatherdid </td>
+<td valign=top align=left>INT </td>
+<td valign=top align=left>Schl&uuml;ssel Vaterverzeichnis</td></tr>
+<tr>
+<td valign=top align=left>entries </td>
+<td valign=top align=left>INT </td>
+<td valign=top align=left>Anzahl der Verzeichniseintr&auml;ge</td></tr>
+</table>
+<p><i>
+Tabelle 45.1: Die Struktur der dir-Tabelle</i></p>
+
+<p>
+Der Einfachheit halber wollen wir uns hier auf die Tabelle <i>dir</i>
+der Datenbank konzentrieren, obwohl die Java Bean f&uuml;r die Klasse
+<i>file</i> ganz analog w&auml;re. Hierf&uuml;r entwerfen wir zun&auml;chst
+eine einfache Javaklasse mit Variablen, die den Attributen der Datenbank-Tabelle
+entsprechen. Jede Instanz der Klasse kann damit eine Zeile bzw. einen
+Datensatz der Tabelle repr&auml;sentieren.
+<a name="dirtable1"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/**
+<font color="#555555">002 </font> * Diese Klasse repr&auml;sentiert die Tabelle 'dir' der 'DirDB'
+<font color="#555555">003 </font> * Jede Instanz der Klasse repr&auml;sentiert wiederum einen
+<font color="#555555">004 </font> * Datensatz
+<font color="#555555">005 </font> */</font>
+<font color="#555555">006 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Directory {
+<font color="#555555">007 </font>
+<font color="#555555">008 </font> <font color="#00AA00">// Variablen die den Attributen der Tabelle entsprechen</font>
+<font color="#555555">009 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> did;
+<font color="#555555">010 </font> <font color="#0000AA">private</font> String dname;
+<font color="#555555">011 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> fatherid;
+<font color="#555555">012 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> entries;
+<font color="#555555">013 </font>
+<font color="#555555">014 </font> <font color="#00AA00">/**
+<font color="#555555">015 </font> * Ein einfacher Konstruktor ohne Initialisierung der
+<font color="#555555">016 </font> * Objektvariablen
+<font color="#555555">017 </font> */</font>
+<font color="#555555">018 </font> <font color="#0000AA">public</font> Directory() {
+<font color="#555555">019 </font> }
+<font color="#555555">020 </font>
+<font color="#555555">021 </font> <font color="#00AA00">/**
+<font color="#555555">022 </font> * Konstruktor zum Erzeugen von Instanzen der Klasse
+<font color="#555555">023 </font> */</font>
+<font color="#555555">024 </font> <font color="#0000AA">public</font> Directory(<font color="#006699">int</font> did,
+<font color="#555555">025 </font> String dname,
+<font color="#555555">026 </font> <font color="#006699">int</font> fatherid,
+<font color="#555555">027 </font> <font color="#006699">int</font> entries)
+<font color="#555555">028 </font> {
+<font color="#555555">029 </font> <font color="#006699">this</font>.did = did;
+<font color="#555555">030 </font> <font color="#006699">this</font>.dname = dname;
+<font color="#555555">031 </font> <font color="#006699">this</font>.fatherid = fatherid;
+<font color="#555555">032 </font> <font color="#006699">this</font>.entries = entries;
+<font color="#555555">033 </font> }
+<font color="#555555">034 </font>
+<font color="#555555">035 </font> <font color="#00AA00">// Zugriffsmethoden, um die Daten</font>
+<font color="#555555">036 </font> <font color="#00AA00">// Lesen und Schreiben zu k&ouml;nnen </font>
+<font color="#555555">037 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> getDid()
+<font color="#555555">038 </font> {
+<font color="#555555">039 </font> <font color="#0000AA">return</font> did;
+<font color="#555555">040 </font> }
+<font color="#555555">041 </font>
+<font color="#555555">042 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setDid(<font color="#006699">int</font> did)
+<font color="#555555">043 </font> {
+<font color="#555555">044 </font> <font color="#006699">this</font>.did = did;
+<font color="#555555">045 </font> }
+<font color="#555555">046 </font>
+<font color="#555555">047 </font> <font color="#0000AA">public</font> String getDname()
+<font color="#555555">048 </font> {
+<font color="#555555">049 </font> <font color="#0000AA">return</font> dname;
+<font color="#555555">050 </font> }
+<font color="#555555">051 </font>
+<font color="#555555">052 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setDname(String dname)
+<font color="#555555">053 </font> {
+<font color="#555555">054 </font> <font color="#006699">this</font>.dname = dname;
+<font color="#555555">055 </font> }
+<font color="#555555">056 </font>
+<font color="#555555">057 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> getFatherid()
+<font color="#555555">058 </font> {
+<font color="#555555">059 </font> <font color="#0000AA">return</font> fatherid;
+<font color="#555555">060 </font> }
+<font color="#555555">061 </font>
+<font color="#555555">062 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setFatherid(<font color="#006699">int</font> fatherid)
+<font color="#555555">063 </font> {
+<font color="#555555">064 </font> <font color="#006699">this</font>.fatherid = fatherid;
+<font color="#555555">065 </font> }
+<font color="#555555">066 </font>
+<font color="#555555">067 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> getEntries()
+<font color="#555555">068 </font> {
+<font color="#555555">069 </font> <font color="#0000AA">return</font> entries;
+<font color="#555555">070 </font> }
+<font color="#555555">071 </font>
+<font color="#555555">072 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setEntries(<font color="#006699">int</font> entries)
+<font color="#555555">073 </font> {
+<font color="#555555">074 </font> <font color="#006699">this</font>.entries = entries;
+<font color="#555555">075 </font> }
+<font color="#555555">076 </font>
+<font color="#555555">077 </font> <font color="#0000AA">public</font> String toString()
+<font color="#555555">078 </font> {
+<font color="#555555">079 </font> <font color="#0000AA">return</font> <font color="#0000FF">"Directory[id:"</font>+ did + <font color="#0000FF">", name:"</font> + dname + <font color="#0000FF">"]"</font>;
+<font color="#555555">080 </font> }
+<font color="#555555">081 </font>}</pre>
+</font>
+</td>
+</tr>
+</table>
+<i>
+Listing 45.1: Eine Klasse f&uuml;r die dir-Tabelle</i></p>
+
+<p>
+Wie wir sehen enth&auml;lt die Klasse <font color="#000077"><tt>Directory</tt></font>
+f&uuml;r jedes Datenbank-Attribut eine &auml;quivalente Variable,
+die &uuml;ber Getter-Methoden ausgelesen und &uuml;ber Setter-Methoden
+ver&auml;ndert werden kann. Derartige Javaobjekte werden auch als
+Java Beans bezeichnet, die wir in <a href="k100280.html#sectionbeans">Abschnitt 44.1</a>
+kennen gelernt haben.
+
+<!-- Section -->
+
+<a name="sectlevel3id045002002"></a>
+<h3>45.2.2 Verkn&uuml;pfen der Javaklasse mit der Datenbank </h3>
+
+<p>
+Die soeben erstellte Javaklasse ist sehr einfach und entspricht auf
+triviale Weise der Datenbank-Tabelle, jedoch m&uuml;ssen wir diese
+Verkn&uuml;pfung Java auch direkt und unmissverst&auml;ndlich anzeigen.
+Hierzu bedienen wir uns zus&auml;tzlicher Metainformationen in Form
+so genannter <a name="ixa103336">Annotation</a>en, die in <a href="k100277.html#sectionannotationen">Abschnitt 43.6</a>
+beschrieben wurden.
+
+<p>
+Diese Metainformationen beeinflussen die Klasse oder den Programmablauf
+in keiner Weise, k&ouml;nnen jedoch zur Laufzeit - zum Beispiel &uuml;ber
+die Reflection API - ausgelesen werden. Die in den Annotationen hinterlegten
+Informationen teilen der Persistenzschicht dabei mit, welche Tabelle
+der Datenbank und welche Spalten auf die jeweiligen Attribute abgebildet
+werden. Das folgende Listing zeigt die hierf&uuml;r notwendigen Erweiterungen:
+<a name="directory"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#0000AA">import</font> javax.persistence.*;
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#00AA00">/**
+<font color="#555555">004 </font> * Diese Klasse repr&auml;sentiert die Tabelle 'dir' der 'DirDB'
+<font color="#555555">005 </font> * Jede Instanz der Klasse repr&auml;sentiert wiederum einen
+<font color="#555555">006 </font> * Datensatz
+<font color="#555555">007 </font> */</font>
+<font color="#555555">008 </font>@Entity
+<font color="#555555">009 </font>@Table( name = <font color="#0000FF">"dir"</font> )
+<font color="#555555">010 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Directory {
+<font color="#555555">011 </font>
+<font color="#555555">012 </font> <font color="#00AA00">// Variablen die den Attributen der Tabelle entsprechen</font>
+<font color="#555555">013 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> did;
+<font color="#555555">014 </font> <font color="#0000AA">private</font> String dname;
+<font color="#555555">015 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> fatherid;
+<font color="#555555">016 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> entries;
+<font color="#555555">017 </font>
+<font color="#555555">018 </font> <font color="#00AA00">/**
+<font color="#555555">019 </font> * Ein einfacher Konstruktor ohne Initialisierung der
+<font color="#555555">020 </font> * Objektvariablen
+<font color="#555555">021 </font> */</font>
+<font color="#555555">022 </font> <font color="#0000AA">public</font> Directory() {
+<font color="#555555">023 </font> }
+<font color="#555555">024 </font>
+<font color="#555555">025 </font> <font color="#00AA00">/**
+<font color="#555555">026 </font> * Konstruktor mit Initialisierung der Variablen
+<font color="#555555">027 </font> */</font>
+<font color="#555555">028 </font> <font color="#0000AA">public</font> Directory(<font color="#006699">int</font> did,
+<font color="#555555">029 </font> String dname,
+<font color="#555555">030 </font> <font color="#006699">int</font> fatherid,
+<font color="#555555">031 </font> <font color="#006699">int</font> entries)
+<font color="#555555">032 </font> {
+<font color="#555555">033 </font> <font color="#006699">this</font>.did = did;
+<font color="#555555">034 </font> <font color="#006699">this</font>.dname = dname;
+<font color="#555555">035 </font> <font color="#006699">this</font>.fatherid = fatherid;
+<font color="#555555">036 </font> <font color="#006699">this</font>.entries = entries;
+<font color="#555555">037 </font> }
+<font color="#555555">038 </font>
+<font color="#555555">039 </font> <font color="#00AA00">// Zugriffsmethoden, um die Daten der Klasse</font>
+<font color="#555555">040 </font> <font color="#00AA00">// Auslesen und Schreiben zu k&ouml;nnen</font>
+<font color="#555555">041 </font> @Id
+<font color="#555555">042 </font> @Column( name = <font color="#0000FF">"id"</font> )
+<font color="#555555">043 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> getDid()
+<font color="#555555">044 </font> {
+<font color="#555555">045 </font> <font color="#0000AA">return</font> did;
+<font color="#555555">046 </font> }
+<font color="#555555">047 </font>
+<font color="#555555">048 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setDid(<font color="#006699">int</font> did)
+<font color="#555555">049 </font> {
+<font color="#555555">050 </font> <font color="#006699">this</font>.did = did;
+<font color="#555555">051 </font> }
+<font color="#555555">052 </font>
+<font color="#555555">053 </font> @Column( name = <font color="#0000FF">"dname"</font>, nullable = <font color="#006699">false</font> ) <a name="directory.x"></a>
+<font color="#555555">054 </font> <font color="#0000AA">public</font> String getDname()
+<font color="#555555">055 </font> {
+<font color="#555555">056 </font> <font color="#0000AA">return</font> dname;
+<font color="#555555">057 </font> }
+<font color="#555555">058 </font>
+<font color="#555555">059 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setDname(String dname)
+<font color="#555555">060 </font> {
+<font color="#555555">061 </font> <font color="#006699">this</font>.dname = dname;
+<font color="#555555">062 </font> }
+<font color="#555555">063 </font>
+<font color="#555555">064 </font> @Column ( name = <font color="#0000FF">"fatherid"</font> )
+<font color="#555555">065 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> getFatherid()
+<font color="#555555">066 </font> {
+<font color="#555555">067 </font> <font color="#0000AA">return</font> fatherid;
+<font color="#555555">068 </font> }
+<font color="#555555">069 </font>
+<font color="#555555">070 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setFatherid(<font color="#006699">int</font> fatherid)
+<font color="#555555">071 </font> {
+<font color="#555555">072 </font> <font color="#006699">this</font>.fatherid = fatherid;
+<font color="#555555">073 </font> }
+<font color="#555555">074 </font>
+<font color="#555555">075 </font> @Column ( name = <font color="#0000FF">"entries"</font> )
+<font color="#555555">076 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> getEntries()
+<font color="#555555">077 </font> {
+<font color="#555555">078 </font> <font color="#0000AA">return</font> entries;
+<font color="#555555">079 </font> }
+<font color="#555555">080 </font>
+<font color="#555555">081 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setEntries(<font color="#006699">int</font> entries)
+<font color="#555555">082 </font> {
+<font color="#555555">083 </font> <font color="#006699">this</font>.entries = entries;
+<font color="#555555">084 </font> }
+<font color="#555555">085 </font>
+<font color="#555555">086 </font> <font color="#0000AA">public</font> String toString()
+<font color="#555555">087 </font> {
+<font color="#555555">088 </font> <font color="#0000AA">return</font> <font color="#0000FF">"Directory[id:"</font>+ did + <font color="#0000FF">", name:"</font> + dname + <font color="#0000FF">"]"</font>;
+<font color="#555555">089 </font> }
+<font color="#555555">090 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Directory.java"><font color="#000055" size=-1>Directory.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 45.2: Annotierte Klasse f&uuml;r die dir-Tabelle</i></p>
+
+<p>
+Wenn wir dieses Listing mit dem vorangegangenen vergleichen, sehen
+wir, dass lediglich einige Annotationen hinzugekommen sind. Sie enthalten
+Informationen, die Java ben&ouml;tigt, um die Instanzen der Klasse
+mit der Tabelle in der Datenbank zu verkn&uuml;pfen. Die Annotationen
+f&uuml;r das Java Persistenz API k&ouml;nnen entweder &uuml;ber den
+Variablen der Klasse selbst oder &uuml;ber die damit verkn&uuml;pften
+Getter-Methoden stehen. Die Reihenfolge der Methoden spielt keine
+Rolle.
+
+<p>
+Die <a name="ixa103336">Annotation</a>en haben folgende Bedeutung:
+<a name="tableid045002"></a>
+<p>
+<table cols=2 border width=66%>
+
+<tr>
+<td valign=top align=left width=33%><b>Annotation </b></td>
+<td valign=top align=left width=66%><b>Beschreibung</b></td></tr>
+<tr>
+<td valign=top align=left><a href="index_0.html#ixb102474"><font color=#000080><tt>@Entity</tt></font></a>
+</td>
+<td valign=top align=left>Markiert die Klasse als persistierbares,
+dass hei&szlig;t mit einer Datenbank verkn&uuml;pftes Objekt</td></tr>
+<tr>
+<td valign=top align=left><a href="index_0.html#ixb102475"><font color=#000080><tt>@Table</tt></font></a>
+</td>
+<td valign=top align=left>Bezeichnet die verkn&uuml;pfte Datenbanktabelle</td></tr>
+<tr>
+<td valign=top align=left><a href="index_0.html#ixb102476"><font color=#000080><tt>@Id</tt></font></a>
+</td>
+<td valign=top align=left>Markiert das Attribut als Prim&auml;rschl&uuml;ssel
+der Datenbank. Das ist z.B. f&uuml;r Suchoperationen wichtig</td></tr>
+<tr>
+<td valign=top align=left><a href="index_0.html#ixb102477"><font color=#000080><tt>@Column</tt></font></a>
+</td>
+<td valign=top align=left>Verkn&uuml;pft das Attribut mit einer Datenbankspalte</td></tr>
+</table>
+<p><i>
+Tabelle 45.2: Die Struktur der dir-Tabelle</i></p>
+
+<p>
+Die Annotationen <a href="index_t.html#ixb102478"><font color=#000080><tt>Table</tt></font></a>
+und <a href="index_c.html#ixb102479"><font color=#000080><tt>Column</tt></font></a>
+besitzen jeweils das Attribut <font color="#000077"><tt>name</tt></font>,
+das den Namen der verkn&uuml;pften Tabelle bzw. Spalte enth&auml;lt.
+Ist dieser Name identisch mit dem Namen des Javaattributes kann die
+Angabe auch weggelassen werden. Allerdings empfehlen wir Ihnen - schon
+allein um die Dokumentation zu erh&ouml;hen - diese Angabe mit aufzunehmen.
+<a href="k100289.html#directory.x">Zeile 053</a> zeigt zudem, dass
+die Annotationen weitere Attribute aufnehmen k&ouml;nnen, mit denen
+die Struktur und Beschr&auml;nkungen der Datenbank granular konfiguriert
+werden k&ouml;nnen.
+
+<p>
+Die Annotation <font color="#000077"><tt>@Column</tt></font> unterst&uuml;tzt
+folgende Attribute <a name="tableid045003"></a>
+
+<p>
+<table cols=4 border width=66%>
+
+<tr>
+<td valign=top align=left width=16%><b>Attribut </b></td>
+<td valign=top align=left width=16%><b>Typ </b></td>
+<td valign=top align=left width=33%><b>Beschreibung </b></td>
+<td valign=top align=left width=33%><b>Standardwert</b></td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>name</tt></font>
+</td>
+<td valign=top align=left><font color="#000077"><tt>String</tt></font>
+</td>
+<td valign=top align=left>Name der Tabellenspalte </td>
+<td valign=top align=left>Name des Java Bean Attributs</td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>length</tt></font>
+</td>
+<td valign=top align=left><font color="#000077"><tt>int</tt></font>
+</td>
+<td valign=top align=left>Maximale L&auml;nge des Eintrags </td>
+<td valign=top align=left>255</td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>table</tt></font>
+</td>
+<td valign=top align=left><font color="#000077"><tt>String</tt></font>
+</td>
+<td valign=top align=left>Name einer Tabelle </td>
+<td valign=top align=left>Namen der Tabelle dieser Java Bean</td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>nullable</tt></font>
+</td>
+<td valign=top align=left><font color="#000077"><tt>boolean</tt></font>
+</td>
+<td valign=top align=left>Sind <font color="#000077"><tt>null</tt></font>-Werte
+erlaubt? </td>
+<td valign=top align=left><font color="#000077"><tt>true</tt></font></td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>insertable</tt></font>
+</td>
+<td valign=top align=left><font color="#000077"><tt>boolean</tt></font>
+</td>
+<td valign=top align=left>Darf dieser Wert mit INSERT Statements ver&auml;ndert
+werden? </td>
+<td valign=top align=left><font color="#000077"><tt>true</tt></font></td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>updateable</tt></font>
+</td>
+<td valign=top align=left><font color="#000077"><tt>boolean</tt></font>
+</td>
+<td valign=top align=left>Darf dieser Wert mit UPDATE Statements ge&auml;ndert
+werden? </td>
+<td valign=top align=left><font color="#000077"><tt>true</tt></font></td></tr>
+</table>
+<p><i>
+Tabelle 45.3: Attribute der Annotation @Column</i></p>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Egal welche Konstruktoren wir f&uuml;r die mit der Datenbank verkn&uuml;pfte
+Java Bean vorsehen, das Persistenz Framework ben&ouml;tigt zus&auml;tzlich
+einen &#187;leeren&#171; Standardkonstruktor. Bei Bedarf k&ouml;nnen
+Sie dessen Sichtbarkeit auch auf <font color="#000077"><tt>protected</tt></font>
+setzen und damit f&uuml;r andere Klassen weitestgehend einschr&auml;nken.
+Er muss jedoch vorhanden sein, da das Framework sonst nicht mit der
+Java Bean arbeiten kann!</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF">&nbsp;Warnung&nbsp;</font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id045002003"></a>
+<h3>45.2.3 Konfiguration des Datenbank-Zugriffs </h3>
+
+<p>
+Jetzt haben wir eine Java Bean erstellt, die in der Lage, ist einen
+Datensatz der Tabelle <font color="#000077"><tt>dir</tt></font> aufzunehmen
+und diese zudem mit Zusatzinformationen ausgestattet, um die Verkn&uuml;pfung
+zwischen Datenbank auf Javaklasse beschreiben. Was noch fehlt sind
+Informationen dar&uuml;ber, in welcher Datenbank sich die entsprechenden
+Tabellen befinden.
+
+<p>
+Nat&uuml;rlich k&ouml;nnten diese Informationen theoretisch ebenfalls
+in der Javaklasse abgelegt werden, dies w&uuml;rde jedoch zu unflexiblem
+Code f&uuml;hren, der nicht mit verschiedenen Datenbanken zusammenarbeiten
+k&ouml;nnte. Um die tats&auml;chliche Datenbank auch im Nachhinein
+flexibel austauschen und beispielsweise statt der Hypersonic DB eine
+Access Datenbank verwenden zu k&ouml;nnen, werden diese Konfigurationsdaten
+in einer separaten Datei gepflegt. Diese wird auch als <a name="ixa103337"><i>Persistence
+Descriptor</i></a> bezeichnet und k&ouml;nnte
+beispielsweise folgende Form haben:
+<a name="persistence"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font>&lt;?xml version=<font color="#0000FF">"1.0"</font> encoding=<font color="#0000FF">"ISO-8859-1"</font>?&gt;
+<font color="#555555">002 </font>
+<font color="#555555">003 </font>&lt;!-- Persistenz Descriptor zur Konfiguration --&gt;
+<font color="#555555">004 </font>&lt;persistence&gt;
+<font color="#555555">005 </font>
+<font color="#555555">006 </font> &lt;!-- Hinterlegen eines symbolischen Namens --&gt;
+<font color="#555555">007 </font> &lt;persistence-unit name=<font color="#0000FF">"persistenceExample"</font> <a name="persistence.z"></a>
+<font color="#555555">008 </font> transaction-type=<font color="#0000FF">"RESOURCE_LOCAL"</font>&gt;
+<font color="#555555">009 </font>
+<font color="#555555">010 </font> &lt;!-- Zu verwendende Implementierung --&gt;
+<font color="#555555">011 </font> &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
+<font color="#555555">012 </font>
+<font color="#555555">013 </font> &lt;!-- Persistierbare Klassen --&gt;
+<font color="#555555">014 </font> &lt;<font color="#0000AA">class</font>&gt;Directory&lt;/class&gt; <a name="persistence.a"></a>
+<font color="#555555">015 </font>
+<font color="#555555">016 </font> &lt;!-- Konfiguration der Hibernate Implementierung --&gt;
+<font color="#555555">017 </font> &lt;properties&gt;
+<font color="#555555">018 </font> &lt;!-- Name des intern verwendeten JDBC-Treibers --&gt;
+<font color="#555555">019 </font> &lt;property name=<font color="#0000FF">"hibernate.connection.driver_class"</font>
+<font color="#555555">020 </font> value=<font color="#0000FF">"org.hsqldb.jdbcDriver"</font>/&gt; <a name="persistence.b"></a>
+<font color="#555555">021 </font>
+<font color="#555555">022 </font> &lt;!-- URL der zu verwendenden Datenbank --&gt;
+<font color="#555555">023 </font> &lt;property name=<font color="#0000FF">"hibernate.connection.url"</font>
+<font color="#555555">024 </font> value=<font color="#0000FF">"jdbc:hsqldb:hsqldbtest"</font>/&gt; <a name="persistence.c"></a>
+<font color="#555555">025 </font>
+<font color="#555555">026 </font> &lt;!-- SQL-Dialect, den Hibernate verwenden soll --&gt;
+<font color="#555555">027 </font> &lt;property name=<font color="#0000FF">"hibernate.dialect"</font>
+<font color="#555555">028 </font> value=<font color="#0000FF">"org.hibernate.dialect.HSQLDialect"</font>/&gt;
+<font color="#555555">029 </font>
+<font color="#555555">030 </font> &lt;!-- Benutzername und Passwort; Standardwerte der HSQLDB --&gt;
+<font color="#555555">031 </font> &lt;property name=<font color="#0000FF">"hibernate.connection.username"</font> value=<font color="#0000FF">"SA"</font>/&gt; <a name="persistence.d"></a>
+<font color="#555555">032 </font> &lt;property name=<font color="#0000FF">"hibernate.connection.password"</font> value=<font color="#0000FF">""</font>/&gt; <a name="persistence.e"></a>
+<font color="#555555">033 </font>
+<font color="#555555">034 </font> &lt;!-- Flag, ob Tabellen automatisch erzeugt werden sollen --&gt;
+<font color="#555555">035 </font> &lt;property name=<font color="#0000FF">"hibernate.hbm2ddl.auto"</font> value=<font color="#0000FF">"create"</font>/&gt; <a name="persistence.f"></a>
+<font color="#555555">036 </font>
+<font color="#555555">037 </font> &lt;!-- Flag, ob SQL-Statements ausgegeben werden sollen --&gt;
+<font color="#555555">038 </font> &lt;property name=<font color="#0000FF">"hibernate.show_sql"</font> value=<font color="#0000FF">"true"</font>/&gt; <a name="persistence.g"></a>
+<font color="#555555">039 </font> &lt;/properties&gt;
+<font color="#555555">040 </font> &lt;/persistence-unit&gt;
+<font color="#555555">041 </font>&lt;/persistence&gt;</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/persistence.xml"><font color="#000055" size=-1>persistence.xml</font></a></td>
+</tr>
+</table>
+<i>
+Listing 45.3: Konfigurationsdatei f&uuml;r das Java Persistenz API</i></p>
+
+<p>
+Diese Datei muss unter dem Namen <font color="#000077"><tt>persistence.xml</tt></font>
+im Classpath abgelegt werden, und schon kann das Persistenz API die
+Klasse <font color="#000077"><tt>Directory</tt></font> mit der Tabelle
+<font color="#000077"><tt>dir</tt></font> in der HSQLDB verkn&uuml;pfen.
+Am einfachsten ist dies zu bewerkstelligen, indem die Datei <font color="#000077"><tt>persistence.xml</tt></font>
+gemeinsam mit der kompilierten Class-Datei <font color="#000077"><tt>Directory.class</tt></font>
+gespeichert wird.
+
+<!-- Section -->
+
+<a name="sectlevel4id045002003001"></a>
+<h4>Aufbau der Konfigurationsdatei </h4>
+
+<p>
+Die Konfigurationsdatei ist in einzelne Seqmente aufgeteilt, die verschiedene
+Aufgaben besitzen. <a href="k100289.html#persistence">Listing 45.3</a>
+ist so vorkonfiguriert, dass es mit der HSQLDB aus Kapitel <a href="k100265.html#kapiteljdbc">Kapitel 42</a>
+verwenden werden kann. Um auf die Tabellen einer anderen Datenbank
+zuzugreifen m&uuml;ssen der Datenbanktreiber, die URL und die Zugangsdaten
+angepasst werden. Wenn wir dieses Listing mit <a href="k100268.html#jdbcconfig">Listing 42.3</a>
+vergleichen, sollten uns viele Optionen vertraut vorkommen. Diese
+sind nun nicht mehr fest in die Javaklasse einkompiliert, sondern
+k&ouml;nnen in einer separaten Datei gewartet werden. <a name="tableid045004"></a>
+
+<p>
+<table cols=2 border width=66%>
+
+<tr>
+<td valign=top align=left width=25%><b>Zeile </b></td>
+<td valign=top align=left width=75%><b>Beschreibung der Konfigurationseinstellung</b></td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.z">Zeile 007</a>
+</td>
+<td valign=top align=left>Ein symbolischer Name f&uuml;r die Konfiguration,
+den wir sp&auml;ter f&uuml;r den Zugriff verwenden werden</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.a">Zeile 014</a>
+</td>
+<td valign=top align=left>Liste der Klassen, die mit der Datenbank
+verkn&uuml;pft werden sollen</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.b">Zeile 020</a>
+</td>
+<td valign=top align=left>Name des passenden JDBC-Treibers</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.c">Zeile 024</a>
+</td>
+<td valign=top align=left>Name der Datenbank</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.d">Zeile 031</a>
+</td>
+<td valign=top align=left>Benutzername f&uuml;r den Zugriff auf die
+Datenbank</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.e">Zeile 032</a>
+</td>
+<td valign=top align=left>Passwort f&uuml;r den Zugriff auf die Datenbank</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.f">Zeile 035</a>
+</td>
+<td valign=top align=left>Gibt an, ob die Tabellen bei Bedarf dynamisch
+erstellt werden sollen</td></tr>
+<tr>
+<td valign=top align=left><a href="k100289.html#persistence.g">Zeile 038</a>
+</td>
+<td valign=top align=left>Gibt an, ob die intern verwendeten SQL-Statements
+auf der Kommandozeile ausgegeben werden sollen</td></tr>
+</table>
+<p><i>
+Tabelle 45.4: Anpassen der Konfigurationsdatei</i></p>
+
+<p>
+Nachdem wir die Datei <font color="#660099">persistence.xml</font>
+zusammen mit der <font color="#000077"><tt>Directory</tt></font>-Class
+abgelegt haben k&ouml;nnen wir nun mit dem Java Persistenz API arbeiten
+<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>
+Die vorangegangenen Schritte erscheinen Ihnen vielleicht aufw&auml;ndiger
+als die vermeintlichen Pendants im Kapitel &uuml;ber JDBC. Der Vorteil
+des Java Persistenz API liegt jedoch vor allem in der wesentlich einfacheren
+Anwendung, mit der wir uns im folgenden Abschnitt besch&auml;ftigen
+werden.
+
+<p>
+Die gute Nachricht ist: Nachdem wir die Verkn&uuml;pfung zwischen
+Javaklasse und Datenbank nun konfiguriert haben, k&ouml;nnen wir nachfolgend
+einfach mit der <font color="#000077"><tt>Directory</tt></font>-Klasse
+arbeiten, ohne uns weiter um SQL oder Datenbank-Aspekte k&uuml;mmern
+zu m&uuml;ssen.</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">&nbsp;Hinweis&nbsp;</font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100288.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100290.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&gt;&gt;&nbsp;</a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
+<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>