Hibernate

Bei Hibernate handelt es sich um ein Framework zur Abbildung von Objekten auf relationalen Datenbanken für die Programmiersprache Java - es wird auch als Object Relational Mapping Tool bezeichnet. Hibernate ist in der Programmiersprache Java implementiert und steht unter dem u.g. Link als Open Source zur freien Verfügung. Hibernate nutzt das Konzept der Reflexion, um so zur Laufzeit einer Software sogenannte Meta-Informationen über die Struktur von Objekten und die zugrunde liegenden Klassen zu ermitteln, die dann auf die Tabellen einer Datenbank abgebildet werden.


Hibernate implementiert die Java Persistence API (JPA) - eine Standard-API für Objekt-relationale Abbildungen - und bietet darüber hinausgehende Funktionalitäten. Dazu gehören auch Datenbankabfragen mit der Hibernate Query Language (HQL) und die programmatische Möglichkeit für die Definition von Abfragen mit Hilfe der Hibernate Criteria API. Hibernate kann in die unterschiedlichsten Software- und Systemarchitekturen wie Rich-Client, Client-Server, Webanwendungen, J2EE oder Java Enterprise Edition (JEE) integriert werden. Hibernate wurde mit Unterstützung von JBoss Inc. entwickelt und ist auch im JBoss Applikations-Server integriert. Für die .NET-Plattform steht mit NHibernate eine portierte Version von Hibernate zur Verfügung. Dabei werden Fluent NHibernate und LINQ to NHibernate benötigt, die unter den u.g. Links zur Verfügung stehen.

Object Rational Mapping für die strukturellen Abbildungen von relationalen Datenbanken

Mit Object Rational Mapping (OR-Mapping, ORM) wird eine Technik bezeichnet, bei der die Objekte einer auf Grundlage der objektorientierten Programmierung erstellten Software auf die Strukturen einer relationalen Datenbank abgebildet werden. Diese Technik hat im Übrigen eine hohe Verbreitung, da sich die Verwendung rein objektorientierter Datenbanken, OODB, in der Praxis bislang nicht durchsetzte. Da sich die relationalen Formationen nicht immer 1:1 mit den objektorientierten Strukturen verbinden lassen, ist dies ein Ansatz für Tools, die ein OR-Mapping unterstützen. Neben kommerziellen Tools wie Oracle Toplink ist Hibernate eines der bekanntesten und am weitesten entwickelten Persistenz-Frameworks, das als Open Source zur Verfügung steht. Dessen Einsatz ermöglicht es nicht nur die Anbindung an die meisten relationalen Datenbank-Systeme sondern es werden dabei auch Gesichtspunkte wie Clusterfähigkeit, Caching und Session-Management berücksichtigt. Hibernate zeichnet sich sowohl durch eine umfangreiche Werkzeugunterstützung als auch durch eine hohe Performance aus.

Da sich mit Hibernate die meisten verfügbaren Datenbanken verwenden lassen, ist der Zugriff auf die jeweilige Datenbank performant dadurch möglich, dass Hibernate unterschiedliche Datenbank-Dialekte unterstützt. Die dazu notwendigen Informationen für den Zugriff auf die spezifische Datenbank werden in einer separaten Konfigurations-Datei zusammengefasst, die dann bei der Instanziierung der Klasse SessionFactory von Hibernate geladen wird. In der Konfigurations-Datei sind auch die Namen der Klassen zusammengestellt, für deren Instanzen dann zur Laufzeit die Persistenz generiert werden soll. Hibernate nutzt ähnliche Mechanismen wie das bei den ebenfalls bekannten Java Data Objects (JDO) der Fall ist. So kann beispielsweise die Art der ID-Generierung oder die Hierarchie der Vererbung festgelegt werden. Ebenso bietet Hibernate Funktionen wie einen performaten Second Level Cache oder ein Transaktionsmanagement ähnlich wie bei JDO an. Neben der schon genannten Klasse SessionFactory sind weiterhin Session und Transaction zentrale Klassen des Frameworks Hibernate.

Hibernate für vergängliche Objekte

Die Hibernate-Sessions organisieren den Umgang mit den persistenten Objekten und sind damit von zentraler Bedeutung. Jeder Zugriff auf eine Datenbank ist eine Session und verbindet somit die Java Applikation mit der Datenbank. Die Zustände der Geschäftsobjekte werden verwaltet, und die Session ist ebenso für deren Persistierung, Laden sowie Löschen verantwortlich. Um persistente Daten zu verändern, muss mit Transaktionen gearbeitet werden. Sinnvoll ist es, maximal ein Transaktionsobjekt von einer Session erzeugen zu lassen. Die Unterstützung von geschachtelten Transaktionen ist nicht vorgesehen. Sobald mehrere Transaktionen geöffnet sind, laufen diese völlig isoliert voneinander ab. Dabei hat jede Session ihren eigenen Cache, was für die entsprechende Performance sorgt. Hibernate unterstützt verschiedene Implementierungen von Transaktionen. Mit JDBC-Transaktionen wird der Mechanismus der verwendeten Datenbank genutzt. Java Database Connectivity (JDBC) ist Teil des Java Development Kits (JDK) und ermöglicht den Zugriff auf relationale Datenbanken. Alternativ kann mit Java Transaction API (JTA) der Transaktionsmechanismus des Applikations-Servers genutzt werden.

Für die Abfrage von Datenbanken gibt es mit der Hibernate Query Language (HQL) und mit Querys sowie Criterias verschiedene Möglichkeiten. Dabei ist die Syntax von HQL ähnlich der von SQL und der JDO-Abfragesprache JDOQL. Zudem ist die Abfrage über SQL-Statements realisiert und die Criterias-API bietet eine objektorientierte Schnittstelle zur Verwendung in einer Java-Applikation. Seit der Version 3 von Hibernate ist es nicht nur möglich, Daten und Objekte auszulesen, sondern diese können mit einer Abfrage auch modifiziert oder gelöscht werden.

Gegenüber vergleichbaren Persistenz-Frameworks wie dem kommerziellen Oracle Toplink oder dem eher zu den leichtgewichtigen Frameworks zählenden iBATIS, das von Spring unterstützt wird, zeichnet sich Hibernate durch einen fortgeschrittenen Entwicklungszustand aus. Zudem erleichtern eine gute Dokumentation und umfassende Werkzeugunterstützung die Implementierung von Hibernate erheblich. Hibernate kann sowohl direkt von Java-Applikationen und Servlet-Engines genutzt werden als auch in einen Applikations-Server integriert werden.

http://www.hibernate.org

http://www.java.sun.com/javaee/overwiew/faq/persistence.jsp

http://fluentnhibernate.org/

http://sourceforge.net/projects/nhibernate/files/

Informationen zum Artikel
Deutsch: Hibernate
Englisch: hibernate
Veröffentlicht: 08.11.2013
Wörter: 850
Tags: #Java
Links: .NET, Caching, Framework, Hierarchie, Hilfsprogramm