LugFramework.Anwendungsbeschreibung.DatenbankGrundkonfiguration
Back to current versionRestore this version

Hibernate mittels persistence.xml konfigurieren#

Die wichtigsten Parameter für die Datenbankanbindung können bei Hibernate über die Datei hibernate.cfg.xml oder persistence.xml vorgegeben werden.

Achtung:#

Die Dateien hibernate.cfg.xml und persistence.xml sind sich Inhaltlich sehr ähnlich, aber NICHT untereinander austauschbar. Der Aufruf im Programm ist geringfügig unterschiedlich.

Wir verwenden für unsere Applikation die persistence.xml Datei. =======================================================

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

hibernate.connection.driver_class#

Hiermit wird der Datenbanktreiber festgelegt.

Unsere drei wichtigesten Treiber sind:

hsql = org.hsqldb.jdbcDriver

MySQL = com.mysql.jdbc.Driver

PostgreSQL = org.postgresql.Driver

hibernate.connection.url#

Statt localhost kann eine beliebige (erreichbare) IP-Adresse eingegeben werden. Für usere wichtigsten drei Datenbanken folgend die entsprechenden Adressen:

hsql = jdbc:hsqldb:file (Ausgabe in eine lokale Datei MySQL = jdbc:mysql://localhost:3306/Datenbankname PostgreSQL = jdbc:postgresql://localhost:5432/Datenbankname

hibernate.connection.username#

Der Benutzername ist bei HSQL mit SA vorbelegt.

hibernate.connection.password#

Das Passwort kann bei HSQL leer bleiben. Für andere SQL-Server kann hier ein entsprechendes Passwort hinterlegt werden.

hibernate.dialect#

Jede Datenbank unterstützt eine etwas andere Version von SQL. Die Unterschiede betreffen u.a. die Syntax der Spalten z.B. der Datentypen, der verfügbaren SQL-Funktionen usw. Durch den ausgewählten Dialekt vereinheitlicht Hibernate den Zugriff auf diverse Datenbanken.
   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>

hibernate.hbm2ddl.auto#

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.

============================================================

Hibernate mittels hibernate.cfg.xml konfigurieren#

Diese Beispiel wird nur genannt um die Alternative von Hibernate zu nennen. #

============================================================ ============================================================

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.

connection.driver_class#

Hiermit wird der Datenbanktreiber festgelegt.

connection.url#

hsql = jdbc:hsqldb:file (Ausgabe in eine lokale Datei

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>

username#

Der Benutzername ist bei HSQL mit SA vorbelegt.

password#

Das Passwort kann bei HSQL leer bleiben. Für andere SQL-Server kann hier ein entsprechendes Passwort hinterlegt werden.

dialect#

Jede Datenbank unterstützt eine etwas andere Version von SQL. Die Unterschiede betreffen u.a. die Syntax der Spalten z.B. der Datentypen, der verfügbaren SQL-Funktionen usw. Durch den ausgewählten Dialekt vereinheitlicht Hibernate den Zugriff auf diverse Datenbanken.
  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>

cache.provider_class#

Der interne Cache von Hibernate wird ausgeschaltet
       <!-- Disable the second-level cache  -->
       <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

show_sql#

Durch den Parameter show_sql = TRUE gibt Hibernate alle generierten SQLs auf der Konsole aus.
       <!-- Echo all executed SQL to stdout -->
       <property name="show_sql">true</property>

hbm2ddl.auto#

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>

class#

Hier werden alle Klassen inkl. Paket aufgezählt. Somit wird eine Verbindung zu Hibernate hergestellt.

(Diese Klasse werden wir später erstellen.)

       <!-- Mappings -->
       <mapping class="de.tth.genre.Genre"/>