Hibernate (Framework)
Hibernate
| |
---|---|
![]() | |
Basisdaten
| |
Entwickler | JBoss (Red Hat) |
Erscheinungsjahr | 2001 |
Aktuelle Version | 3.3.2 (24. Juni 2009) |
Aktuelle Vorabversion | 3.5.0 Beta1 (21. August 2009) |
Betriebssystem | plattformübergreifend |
Programmiersprache | Java |
Kategorie | ORM |
Lizenz | LGPL |
www.hibernate.org |
Hibernate (englisch für „Winterschlaf halten“) ist ein Open-Source-Persistenz- und ORM-Framework für Java. Für .NET ist eine portierte Version namens NHibernate verfügbar.
Hibernates Hauptaufgabe ist das Object-Relational Mapping (O-R-Mapping, kurz ORM). So ermöglicht es, gewöhnliche Objekte mit Attributen und Methoden (im Java-Bereich POJOs genannt) in relationalen Datenbanken zu speichern und aus entsprechenden Datensätzen wiederum Objekte zu erzeugen. Beziehungen zwischen Objekten werden auf entsprechende Datenbank-Relationen abgebildet.
Darüber hinaus bietet Hibernate Mechanismen um, ohne DB-Zugriffe explizit in SQL programmieren zu müssen, auf Datenbanken zugreifen zu können. Dafür generiert Hibernate, abhängig vom SQL-Dialekt der verwendeten Datenbank, die SQL Statements. Damit bleibt die Applikation selbst von der gewählten Datenbank unabhängig.
Anwendungsseitig kann Hibernate in Java-Applikationen und Servlet-Engines benutzt werden oder in einen Applikationsserver integriert werden.
Funktionalität
Die Abfrage der persistierten Objekte erfolgt wahlweise über die SQL-ähnliche Abfragesprache Hibernate Query Language (HQL), mittels SQL Statements oder objektorientiert mittels der Hibernate Criteria-API. Die Abfragen werden je nach verwendeter Datenbank mittels JDBC auf den entsprechenden SQL Dialekt übersetzt. Hibernate bietet für alle aktuellen relationalen Datenbanksysteme entsprechende Einstellungen, neue SQL Dialekte können vom Benutzer selbst hinzugefügt werden.[1]
Objektrelationale Abbildung
Hibernate ermöglicht eine transparente Persistenz von Plain Old Java Objects (POJOs). Einzig ein parameterloser Konstruktor muss gegeben sein. Da Hibernate mittels Reflection auf die Attribute der Klassen zugreift, sind keine öffentlichen Getter- und Setter-Methoden notwendig.
Das Mapping von Java-Klassen auf Datenbanktabellen wird mittels einer XML-Datei (Mapping File) oder mit Java-Annotation bewerkstelligt. Bei der Verwendung von XML-Dateien können mittels der Hibernate Tools sowohl die dazupassenden Java Klassen, als auch die Datenbanktabellen generiert werden, bei der Verwendung von Annotations ist letzteres auch möglich.
Hibernate unterstützt Objektreferenzen (1:1 Relationen) und (typisierte) Java Collections (1:N und N:M Relationen). Darüberhinaus auch noch Vererbungsbeziehungen zwischen Klassen und auch reflexive Beziehungen auf die eigene Klasse. Beim Laden von Objekten können in Beziehung stehende Objekte wahlweise sofort mitgeladen werden (eager loading) oder erst dann, wenn sie wirklich benötigt werden (lazy loading). Lazy Loading ist der default für alle 1:N und N:M Beziehungen, funktioniert aber klarerweise nur innerhalb derselben Transaktion bzw. Session. Hibernate kann auch so konfiguriert werden, dass Operationen wie Speichern oder Löschen auch über Relationen kaskadieren und somit referentielle Integrität gewahrt bleibt.
Ebenso unterstützt Hibernate eine wahlfreie Abbildung von Java-Typen auf die von der Datenbank unterstützten SQL-Typen. Damit wird z.B. ermöglicht Java Enums analog zu normalen Integer Properties zu mappen, oder einzelne Properties auf mehrere Tabellenspalten zu verteilen.
Weitere Funktionalitäten
Neben der Kernfunktionalität umfasst Hibernate noch folgende Unterprojekte:
- Hibernate Annotations
- OR-Mapping mittels Annotations
- Hibernate EntityManager
- Umsetzung der Standard Java Persistence API
- Hibernate Shards
- Zugriff auf horizontal partitionierte Datenbanktabellen
- Hibernate Validator
- Definition von Daten-Integritäts- und Validierungsregeln in JavaBean-Klassen mittels Annotations
- Hibernate Search
- Transparente Erstellung eines Volltextindexes und Volltextsuche mit Lucene
- NHibernate
- Hibernate für das .NET Framework
Geschichte und Verbreitung
Hibernate wurde 2001 von einem Team an Java Entwicklern unter Gavin King entwickelt. Das Unternehmen JBoss, Inc., Hersteller des gleichnamigen freien Java Anwendungsservers, stellte später einige der wichtigsten Hibernate Entwickler ein, um die Integration von Hibernate in JBoss voranzutreiben.
Die aktuelle Major Version von Hibernate ist die Version 3.x. Sie brachte Funktionalitäten wie Session-basierte Filter, JDK 5.0 Annotations und Generics, DB-Schema Validierung (V 3.1), JPA 1.0 Unterstützung (V 3.2) und Aufteilung in Module sowie Apache Maven Unterstützung (V 3.3).[2]
Aktuell wird an der Version 3.5.0 gearbeitet. Diese bringt vor allem die Unterstützung für JPA 2.0, darüber hinaus Fetch Profile und die Zusammenlegung von Hibernate Annotations, Hibernate EntityManager und Hibernate Core.[3]
Hibernate wird lt. Homepage von zehntausenden Java-Projekten weltweit verwendet. Etwa 25.000 Entwickler sind bei den Hibernate-Foren angemeldet. Hibernate wird im Schnitt ca. 3.000 Mal täglich heruntergeladen.[4]
Siehe auch
- Java Data Objects (JDO) – genormte Persistenz-API für beliebige Datenbanken
- Java Persistence API (JPA) – Persistenz-API für relationale Datenbanken, Nachfolger von JDO
- Spring (Framework)
- Serialisierung
- iBATIS – Persistenzframework ohne ORM-Funktionalität
- EclipseLink − ähnliches Persistenzframework wie Hibernate, JPA-Referenzimplementierung
Literatur
- Christian Bauer, Gavin King: Java-Persistence mit Hibernate, Hanser Verlag, 2007, ISBN 978-3-446-40941-5
- Richard Oates, Thomas Langer, Stefan Wille, Torsten Lueckow, Gerald Bachlmayr: Spring & Hibernate. Eine praxisbezogene Einführung, Hanser Verlag, 2006, ISBN 978-3-446-40457-1
- Sebastian Hennebrüder: Hibernate, Das Praxisbuch für Entwickler, Galileo Press, 2007, ISBN 978-3-89842-635-0
- Dave Minter, Jeff Linwood, Reinhard Engel: Einführung in Hibernate, Mitp-Verlag, 2007, ISBN 978-3826617942
- Bernd Müller, Harald Wehr: Java-Persistence-API mit Hibernate, Addison-Wesley, 2007, ISBN 978-3827325372
- Robert F. Beeger, Arno Haase, Stefan Roock, Sebastian Sanitz: Hibernate: Persistenz in Java-Systemen mit Hibernate 3.2 und dem Java Persistence API, Dpunkt Verlag, 2007, ISBN 978-3898644471
- Markus Kehle, Hien Robert: Hibernate und die Java Persistence API, Entwickler.Press, 2006, ISBN 978-3935042963
Weblinks
- http://www.hibernate.org – Projekthomepage
- NHibernate – Hibernate für .NET