HSQL benötigt lediglich die Datei hsql.jar. Alle Daten werden in einer einfachen Textdatei in Klartext gespeichert. Mit einem einfachen Texteditor ist eine Änderung der Daten möglich, sollte aber vermieden werden. Für HSQL wird kein gesonderter SQL-Server wie z.B: bei MySQL oder PostgreSQL benötigt. Aufgrund der einfachen Konfiguration und Übertragbarkeit der Daten mit dem Programm auf andere Rechner bzw. die Verwendung schreibgeschützt von einer CD/DVD wird dieses Beispiel mit HSQL starten.
Eclipse: File / New / Folder
Als Folder Name geben wir "lib" ein.
In diesem "lib" Verzeichnis werden zukünftig alle für das Projekt benötigten Bibliotheken gespeichert.
Insbesondere die Dateien von Hibernate ändern sich von Version zu Version. Daher werden diese hier nicht einzeln aufgezählt. Üblicherweise befindet sich innerhalb des Hibernate Verzeichnisses eine Readme.txt Datei. In dieser Datei werden alle benötigten Bibliotheken und deren Einsatzzweck genannt.
Für HSQL wird, wie bereits erwähnt, nur die Datei hsqldb.jar und für unser Logging die Datei log4j VERSION.jar in unser "lib" Verzeichnis kopiert.
Anschließend werden alle Bibliotheken in unser Projekt eingebunden.
Bevor wir die Fenstergestaltung von Eingabemasken beginnen schaffen wir die Basis für die Datenbankanbindung.
Die wichtigsten Parameter für die Datenbankanbindung können bei Hibernate über die Datei hibernate.cfg.xml oder persistence.xml vorgegeben werden.
Der Vorteil der persistence.xml Datei ist hauptsächlich die zusätzliche Möglichkeit auch die Konfiguration für Java persistence API (JPA) und Diverse weitere APIś einzutragen. Die persistence.xml bietet also die Möglichkeit Hibernate oder alternativ JPA einzusetzen. Beide Möglichkeiten können sogar parallel genutzt werden.
Die Parameter der persistence.xml Datei werden im Programm für die "Entity Manager Factory (EMF)" benötigt. Die "Entity Manager Factory (EMF)" entspricht der Session Factory von Hibernate.
Die Konfiguration der "Entity Manager Factory (EMF)" erfolgt über die Konfigurationsdatei oder über einen Satz von Mapping Metadaten (annotierte Klassen) und wird auch "persistence Unit" genannt.
Die Datei persistence.xml muss sich im Verzeichnis "src/META-INF/" der Anwendung gespeichert werden. Bitte auf Groß- Kleinschreibung achten.
<persistence>
<persistence-unit name="dbfilme">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>de.tth.genre.Genre</class>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:datenbank"/>
<property name="hibernate.connection.username" value="SA"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
</properties>
</persistence-unit>
</persistence>
Mit persistence-unit wird ein eindeutiger Name festgelegt. Wenn nur eine Datenbank verwendet wird muss dieser Parameter nicht gesetzt werden.
<persistence-unit name="dbfilme">
Im Quellcode wird durch folgende Zeile zugegriffen:
@PersistenceContext(unitName = "dbfilme")
Folgende Zeile soll die Verbindung zu den Klassen ermöglichen:
hibernate.archive.autodetection
Unsere drei wichtigesten Treiber sind:
hsql = org.hsqldb.jdbcDriver
MySQL = com.mysql.jdbc.Driver
PostgreSQL = org.postgresql.Driver
hsql = jdbc:hsqldb:file (Ausgabe in eine lokale Datei
MySQL = jdbc:mysql://localhost:3306/Datenbankname
PostgreSQL = jdbc:postgresql://localhost:5432/Datenbankname
hsql = org.hibernate.dialect.MySQLDialect MySQL = org.hibernate.dialect.HSQLDialect PostgreSQL = org.hibernate.dialect.PostgreSQLDialect
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
hbm2ddl.auto = update = erstellt Hibernate die Tabellen automatisch, sofern sie noch nicht existieren.
hbm2ddl.auto = create = LÖSCHT ALLE TABELLEN und erstellt automatisch neue Tabellen.
============================================================
DIESE VORGEHENSWEISE WENDEN WIR IN UNSEREM BEISPIEL JEDOCH NICHT AN. ============================================================
Um die Datei hibernate.cfg.xml einzusetzen muss mit der Session Factory gearbeitet werden!
Die Datei hibernate.cfg.xml sollte sich im Root-Verzeichnis des Classpaths der Anwendung gespeichert werden. Das ist das Verzeichnis "src" eines Projektes.
Es folgt nun die komplette Datei: hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
//
<hibernate-configuration>
<session-factory>
//
<!-- Database connection settings -->
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:file</property>
<property name="connection.username">SA</property>
<property name="connection.password"></property>
//
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
//
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
//
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
//
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
//
<!-- Mappings -->
<mapping class="de.tth.genre.Genre"/>
//
</session-factory>
</hibernate-configuration>
Die Dokumententypdeklaration wird vom XML-Parser verwendet
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
Hier werden die Datenbankspezifischen Angaben durchgeführt.
MySQL = jdbc:mysql://localhost:3306/Datenbankname
PostgreSQL = jdbc:postgresql://localhost:5432/Datenbankname
<!-- Database connection settings -->
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:file</property>
<property name="connection.username">SA</property>
<property name="connection.password"></property>
hsql = org.hibernate.dialect.MySQLDialect MySQL = org.hibernate.dialect.HSQLDialect PostgreSQL = org.hibernate.dialect.PostgreSQLDialect
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
hbm2ddl.auto = update = erstellt Hibernate die Tabellen automatisch, sofern sie noch nicht existieren.
hbm2ddl.auto = create = LÖSCHT ALLE TABELLEN und erstellt automatisch neue Tabellen.
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
(Diese Klasse werden wir später erstellen.)
<!-- Mappings -->
<mapping class="de.tth.genre.Genre"/>