Hibernate Architektur

Hibernate Architektur

Das Hibernate-Framework schafft eine Verbindung zwischen relationaler-Datenbanktabelle und Java-POJO-Klasse. Dabei stellt eine XML-Konfigurationsdatei den Mittelpunkt für die Verknüpfung dar. In dieser finden sich Informationen über entsprechende Tabellen sowie die POJO-Klassen und deren Felder. Die Verbindung zwischen Java-Klasse und relationaler Tabelle wird als Binding bezeichnet. Abbildung 13 zeigt den Aufbau einer relationalen Datenbanktabelle, in der Benutzerinformationen abgelegt werden können:

Abbildung 13: Relationale Datenbanktabelle mit 3 Feldern
Quelle: Eigene Darstellung

Parallel zu der Datenbanktabelle existiert eine Java-Klasse, welche die Inhalte der Felder der Datenbanktabelle aufnehmen kann.

package de;

/**
 * * Business-Objekt für den Benutzer. * *
 * 
 * @author Fabian Rossbacher *
 */
public class Benutzer {
	/**
	 * Die eindeutige ID des Benutzers
	 */
	private Long id;
	/**
	 * Das Passwort des Benutzers
	 */
	private String passwort;
	/**
	 * Die Email-Adresse des Benutzers
	 */
	private String email;
	/**
	 * Datum der Erstellung des Benutzers
	 */
	private Date datum; 
	// Getter/Setter
}


Abbildung 14: Java-POJO-Klasse für die Speicherung von Benutzerdaten
Quelle: Eigene Darstellung

Aufgabe von Hibernate ist es nun, eine Verbindung zwischen der Datenbanktabelle und der Javaklasse zu knüpfen. Hierfür wird ein XML-Mapping in der Hibernate-Mapping-Sprache erstellt. Dieses wird von Hibernate genutzt, um Daten aus der relationalen Datenbanktabelle zu lesen, die entsprechenden Werte in die Felder der Javaklasse zu schreiben und sie dem Benutzer zur Verfügung zu stellen. Die Informationen aus dem Mapping können aber auch für den umgekehrten Weg genutzt werden: Daten innerhalb der POJO-Klassen können über die Hibernate-Funktion „saveOrUpdate“ in die Datenbank übertragen werden. Die Methode „delete“ löscht einen Datensatz anhand der eindeutigen ID in der Javaklasse. Abbildung 15 zeigt eine Mapping-Konfiguration, welche die in vorangegangenen Abbildungen aufgeführten Elemente miteinander verbindet:

<?xml version="1.0"?>
<hibernate-mapping>
	<class name="de.Benutzer" table="benutzerTabele">
		<id name="id" column="id" type="long" />
		<property name="passwort" column="passwort" />
		<property name="email" column="email" />
		<property name="datum" column="datum" />
	</class>
</hibernate-mapping>


Abbildung 15: Hibernate XML-Mapping
Quelle: Eigene Darstellung

Eingeleitet wird das Mapping mit dem öffnenden Tag „hibernate-mapping“. In diesem wird für jede gemappte Javaklasse ein weiteres Tag mit dem Namen „class“ erstellt. Als Attribut muss der Name der Java-Klasse plus Package sowie der Name der Datenbanktabelle eingetragen werden. Innerhalb des „class“-Knotens erfolgt mittels des „Property“-Tags die eigentliche Verknüpfung zwischen dem Feld in der Datenbanktabelle und der Java-Klasse. Eine Besonderheit stellt das Feld für den Primärschlüssel dar. Dieser wird mit dem Tag „id“ gekennzeichnet. Um die eigentliche Datenbankverbindung sowie die gewünschten Mapping-Files festzulegen, wird zusätzlich eine „Hibernate-Konfiguration“ erstellt. In dieser können neben der Datenbankverbindung auch Informationen über Timeouts, die maximale Anzahl von Zugriffen und den Treiber für die Datenbank selbst hinterlegt werden. Die folgende Tabelle zeigt eine „Hibernate-Konfiguration“ für eine Verbindung auf eine Postgres-Datenbank und dem zuvor erstellten XML-Mapping:

<?xml version='1.0' encoding='utf-8'?>
<hibernate-configuration>
	<session-factory name="java:comp/env/hibernate/SessionFactory">
		<! —properties --
		<property name="hibernate.connection.driver_class">
			org.postgresql.Driver
		</property>
		<property name="hibernate.connection.url">
			jdbc:postgresql:benutzerDatenbank
		</property>
		<property name="hibernate.connection.username">
			username
		</property>
		<property name="hibernate.connection.password">
			passwort
		</property><!-- mapping files -->
		<mapping resource="Benutzer.hbm.xml" />
	</session-factory>
</hibernate-configuration>


Abbildung 16: Hibernate-Konfiguration
Quelle: Eigene Darstellung

Für jede Datenbankverbindung wird ein „session-factory“-Tag angelegt. Als Parameter dient ein eindeutiger Name, welcher in der eigentlichen Anwendung für den Verbindungsaufbau genutzt wird. Treiberklasse, Datenbankname, Benutzer und Passwort werden über „Property“-Tags konfiguriert. Die gewünschten Mappings werden mittels des „Mapping“-Tags eingetragen.