diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100289.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100289.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100289.html | 680 |
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"> 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="k100288.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100290.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="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ür Tabellen</a>
+<li><a href="k100289.html#sectlevel3id045002002">45.2.2 Verknü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ü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önnten
+wir auf die Idee kommen, dass diese auch durch eine Java Bean repräsentiert
+werden kann, deren Instanzen die Datensätze repräsentieren.
+Zur Erinnerung - und damit Sie nicht immer hin- und herblättern
+müssen - sei hier noch einmal die Tabellenstruktur angefü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ärschlü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ü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ä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ür die Klasse
+<i>file</i> ganz analog wäre. Hierfür entwerfen wir zunä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ä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äsentiert die Tabelle 'dir' der 'DirDB'
+<font color="#555555">003 </font> * Jede Instanz der Klasse reprä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ö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ür die dir-Tabelle</i></p>
+
+<p>
+Wie wir sehen enthält die Klasse <font color="#000077"><tt>Directory</tt></font>
+für jedes Datenbank-Attribut eine äquivalente Variable,
+die über Getter-Methoden ausgelesen und über Setter-Methoden
+verä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ü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üssen wir diese
+Verknüpfung Java auch direkt und unmissverständlich anzeigen.
+Hierzu bedienen wir uns zusä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önnen jedoch zur Laufzeit - zum Beispiel ü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ü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äsentiert die Tabelle 'dir' der 'DirDB'
+<font color="#555555">005 </font> * Jede Instanz der Klasse reprä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ö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ü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ötigt, um die Instanzen der Klasse
+mit der Tabelle in der Datenbank zu verknüpfen. Die Annotationen
+für das Java Persistenz API können entweder über den
+Variablen der Klasse selbst oder über die damit verknü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ßt mit einer Datenbank verknü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ü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ärschlüssel
+der Datenbank. Das ist z.B. fü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ü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üpften Tabelle bzw. Spalte enthä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öhen - diese Angabe mit aufzunehmen.
+<a href="k100289.html#directory.x">Zeile 053</a> zeigt zudem, dass
+die Annotationen weitere Attribute aufnehmen können, mit denen
+die Struktur und Beschränkungen der Datenbank granular konfiguriert
+werden können.
+
+<p>
+Die Annotation <font color="#000077"><tt>@Column</tt></font> unterstü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ä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ä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ä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ür die mit der Datenbank verknüpfte
+Java Bean vorsehen, das Persistenz Framework benötigt zusätzlich
+einen »leeren« Standardkonstruktor. Bei Bedarf können
+Sie dessen Sichtbarkeit auch auf <font color="#000077"><tt>protected</tt></font>
+setzen und damit für andere Klassen weitestgehend einschrä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"> Warnung </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üpfung
+zwischen Datenbank auf Javaklasse beschreiben. Was noch fehlt sind
+Informationen darüber, in welcher Datenbank sich die entsprechenden
+Tabellen befinden.
+
+<p>
+Natürlich könnten diese Informationen theoretisch ebenfalls
+in der Javaklasse abgelegt werden, dies würde jedoch zu unflexiblem
+Code führen, der nicht mit verschiedenen Datenbanken zusammenarbeiten
+könnte. Um die tatsächliche Datenbank auch im Nachhinein
+flexibel austauschen und beispielsweise statt der Hypersonic DB eine
+Access Datenbank verwenden zu können, werden diese Konfigurationsdaten
+in einer separaten Datei gepflegt. Diese wird auch als <a name="ixa103337"><i>Persistence
+Descriptor</i></a> bezeichnet und kö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><?xml version=<font color="#0000FF">"1.0"</font> encoding=<font color="#0000FF">"ISO-8859-1"</font>?>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><!-- Persistenz Descriptor zur Konfiguration -->
+<font color="#555555">004 </font><persistence>
+<font color="#555555">005 </font>
+<font color="#555555">006 </font> <!-- Hinterlegen eines symbolischen Namens -->
+<font color="#555555">007 </font> <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>>
+<font color="#555555">009 </font>
+<font color="#555555">010 </font> <!-- Zu verwendende Implementierung -->
+<font color="#555555">011 </font> <provider>org.hibernate.ejb.HibernatePersistence</provider>
+<font color="#555555">012 </font>
+<font color="#555555">013 </font> <!-- Persistierbare Klassen -->
+<font color="#555555">014 </font> <<font color="#0000AA">class</font>>Directory</class> <a name="persistence.a"></a>
+<font color="#555555">015 </font>
+<font color="#555555">016 </font> <!-- Konfiguration der Hibernate Implementierung -->
+<font color="#555555">017 </font> <properties>
+<font color="#555555">018 </font> <!-- Name des intern verwendeten JDBC-Treibers -->
+<font color="#555555">019 </font> <property name=<font color="#0000FF">"hibernate.connection.driver_class"</font>
+<font color="#555555">020 </font> value=<font color="#0000FF">"org.hsqldb.jdbcDriver"</font>/> <a name="persistence.b"></a>
+<font color="#555555">021 </font>
+<font color="#555555">022 </font> <!-- URL der zu verwendenden Datenbank -->
+<font color="#555555">023 </font> <property name=<font color="#0000FF">"hibernate.connection.url"</font>
+<font color="#555555">024 </font> value=<font color="#0000FF">"jdbc:hsqldb:hsqldbtest"</font>/> <a name="persistence.c"></a>
+<font color="#555555">025 </font>
+<font color="#555555">026 </font> <!-- SQL-Dialect, den Hibernate verwenden soll -->
+<font color="#555555">027 </font> <property name=<font color="#0000FF">"hibernate.dialect"</font>
+<font color="#555555">028 </font> value=<font color="#0000FF">"org.hibernate.dialect.HSQLDialect"</font>/>
+<font color="#555555">029 </font>
+<font color="#555555">030 </font> <!-- Benutzername und Passwort; Standardwerte der HSQLDB -->
+<font color="#555555">031 </font> <property name=<font color="#0000FF">"hibernate.connection.username"</font> value=<font color="#0000FF">"SA"</font>/> <a name="persistence.d"></a>
+<font color="#555555">032 </font> <property name=<font color="#0000FF">"hibernate.connection.password"</font> value=<font color="#0000FF">""</font>/> <a name="persistence.e"></a>
+<font color="#555555">033 </font>
+<font color="#555555">034 </font> <!-- Flag, ob Tabellen automatisch erzeugt werden sollen -->
+<font color="#555555">035 </font> <property name=<font color="#0000FF">"hibernate.hbm2ddl.auto"</font> value=<font color="#0000FF">"create"</font>/> <a name="persistence.f"></a>
+<font color="#555555">036 </font>
+<font color="#555555">037 </font> <!-- Flag, ob SQL-Statements ausgegeben werden sollen -->
+<font color="#555555">038 </font> <property name=<font color="#0000FF">"hibernate.show_sql"</font> value=<font color="#0000FF">"true"</font>/> <a name="persistence.g"></a>
+<font color="#555555">039 </font> </properties>
+<font color="#555555">040 </font> </persistence-unit>
+<font color="#555555">041 </font></persistence></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ü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ü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ü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ö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ür die Konfiguration,
+den wir später fü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ü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ü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ü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ö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ändiger
+als die vermeintlichen Pendants im Kapitel ü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äftigen
+werden.
+
+<p>
+Die gute Nachricht ist: Nachdem wir die Verknüpfung zwischen
+Javaklasse und Datenbank nun konfiguriert haben, können wir nachfolgend
+einfach mit der <font color="#000077"><tt>Directory</tt></font>-Klasse
+arbeiten, ohne uns weiter um SQL oder Datenbank-Aspekte kümmern
+zu mü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"> Hinweis </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"> 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="k100288.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100290.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>
|
