JBoss-Buch von Heiko W. Rupp
Beispiel aus Kapitel 3 mit PostgreSQL
[
Hauptseite ]
Eine verbreitete Open-Source-Datenbank ist
PostgreSQL. Diese Seite zeigt die Änderungen an der Beispielapplikation
aus Kapitel 3, die für den Betrieb mit PostgresQL notwendig sind.
Hierfür wird eine laufende PostgreSQL-Datenbank vorausgesetzt.
PostgreSQL als Default-Datenbank aufsetzen
Es wird hier von PostgreSQL 8.0 ausgegangen. Der JBoss-Server sollte nicht
laufen.
Nach diesen Anpassungen kann der Server gestartet werden.
Änderungen an der Applikation
Die Änderungen der Applikation betreffen in erster Linie die
entity-commands
- EmailEntityBean.java:
Hier müssen zwei Stellen geändert werden.
- Im Klassenkopf muss ein anderes Entity-Command angegeben werden:
* @jboss.entity-command name = "postgresql-fetch-seq"
Ausserdem muss / kann /sollte :-) ein Primary-Key-Constraint
angeshaltet werden:
* @jboss.persistence
* create-table = "${create.table}"
* remove-table = "${remove.table}"
* pk-constraint = "true"
PostgreSQL verhält sich hier anders als die hsqldb und legt sonst keinen
Primary-Key an.
-
As zweites muss beim Feld emailpk angegeben werden, dass der
Datentyp in der Datenbank SERIAL sein soll. Dieser Typ muss
verwendet werden, wenn die Datenbank den Zähler hochzählen soll.
* @jboss.persistence auto-increment="true"
* @jboss.sql-type type="SERIAL"
* @jboss.jdbc-type type="INTEGER"
*/
public abstract Integer getEmailpk();
- AddressEntityBean.java:
Beim AddressEntityBean sind Änderungen analog zum EmailEntityBean
durchzuführen. Ausserdem muss die Relation zum EmailEntityBean noch
modifizeirt werden:
-
Auch hier muss im Klassenkopf wieder das Entity-Command angepasst werden.
* @jboss.persistence
* create-table = "${create.table}"
* remove-table = "${remove.table}"
* pk-constraint = "true"
*@jboss.entity-command name = "postgresql-fetch-seq"
*
*/
public abstract class AddressEntityBean implements EntityBean {
-
Auch hier muss das Feld mit dem Primärschlüssel als Datenbanktyp
SERIAL gekennzeichnet werden:
* @jboss.persistence auto-increment = "true"
* @jboss.jdbc-type type = "INTEGER"
* @jboss.sql-type type="SERIAL"
*/
public abstract Integer getPrimkey();
-
Bei der Relation muss der Typ der FK-Spalte in der Email-Tabelle (N-Seite
der Beziehung) auf int4 gesetzt werden, da dieser sonst
implizit auf SERIAL gesetzt wird (kommt vom related-pk-field),
was falsch ist.
* @jboss.target-relation fk-column = "address_fk"
* related-pk-field = "primkey"
* fk-constraint = "true"
* sql-type="int4"
* jdbc-type="INTEGER"
[
Hauptseite ]