In seinem Buch "JPA mit Hibernate" nimmt sich Daniel Röder der komplexen Thematik rund um die Java Persistence API (JPA) an. Die JPA wurde von der JSR 220 Expert Group entwickelt, um als Schnittstelle die objektrelationale Unverträglichkeit (Impedance Mismatch) durch objektrelationales Mapping aufzulösen. Mit Hibernate lässt sich dieser Standard implementieren und durch produktspezifische Erweiterungen modifizieren.
Der Autor adressiert mit seinem Buch Entwickler, die sich einen Überblick über den Themenkomplex JPA und Hibernate schaffen wollen. Nach einer kurzen Einführung in Datenbanken, Hibernate als Framework und JPA werden Hibernate, Java und JPA etwas näher erklärt. Ist die Einführung von Annahmen und Verallgemeinerungen geprägt, die so anzuzweifeln sind (so muss z. B. ein Eintrag in einer Datenbanktabelle nicht zwingend einen Primärschlüssel besitzen), nimmt das Buch nach einem vergleichsweise schwachen Start ganz passable Formen an. Es ist zwar nicht nachvollziehbar, wieso der Autor Vector und nicht ArrayList als Datenstruktur nutzt, da Vector alle Operationen synchronisiert und einen negativen Einfluss auf die Performance hat. Sehr angenehm dagegen ist die Beschreibung der Annotations und Generics und der praktische Hinweis, wie eigene generische Typen zu definieren sind. Darüber hinaus wird die Architektur Hibernate und die einzelnen Projekte näher beschrieben, was dieses komplexe Framework etwas transparenter macht. An einem Beispielprojekt erlernt man gut verständlich, aber leider etwas zu knapp, wie mit Java 5, PostgreSQL, GlassFish und NetBeans eine Hibernate-Applikation implementiert werden kann. Zusätzlich wird der Unterschied zwischen "klassischem" Hibernate mit XML-Mappings, Hibernate Annotations und Hibernate als JPA-Implementierung gezeigt. Darüber hinaus wird auf die Möglichkeit eingegangen, das Framework als Persistenzschicht im Application-Server zu verwenden. Ein sehr komplexes und fehleranfälliges Aufgabenfeld ist die des korrekten Mappings der Entities auf Datenbanktabellen. Röder behandelt in diesem Kontext Themen wie Assoziationen, Strategien bei der Vererbung und Collections. Leider vermisse ich an dieser Stelle einen kurzen Hinweis auf JBoss Envers, das eine einfache Versionierung der Entitäten (Historisierung der von Hibernate verwalteten Datenbestände) ermöglicht. Der Lebenszyklus einer Entität wird ebenso behandelt wie die Verwendung von Detached-Entitäten als Transportobjekte der Präsentationsschicht und Datenbankschicht einer Applikation.
Ein weiteres essenzielles Kapitel für jeden Entwickler, der sich nur ansatzweise mit Datenbanken beschäftigt, sind Transaktionen. Der Autor erklärt Datenbanktransaktionen nachvollziehbar anhand der ACID-Eigenschaften und geht auf die verschiedenen Probleme bei parallelen Datenbankoperationen ein. Sehr hilfreich sind die Beispiele für Optimistic und Pessimistic Locking. Leider vermisse ich an dieser Stelle einen Hinweis auf verteilte Transaktionen (XA-Protokoll), die bei mehreren Datenbanken relevant werden. Einen erfreulich großen Raum nehmen die Möglichkeiten der Datenbankabfragen mit Hibernate und JPA ein, selbst native Queries mit ResultSet Mapping werden erwähnt. An dieser Stelle ist zu merken, dass es dem Autor wichtig war, diesem für die Performance essenziellen Thema entsprechenden Raum zu geben. Der letzte Teil des Buchs beschäftigt sich abschließend mit noch möglichen Fetching-Strategien und benutzerdefinierten Mapping-Typen.
Leider folgt nach 200 Seiten netto bereits ein sehr umfassender Anhang, der im Wesentlichen aus einer Referenz der Annotationen, die sich der Leser auch ohne Probleme im Internet zusammenstellen hätte können, besteht. Diese Seiten hätten sinnvoller für weitere Beispiele oder Performanceanalyse und -optimierung genutzt werden können.
Bei den Fachbüchern zu Hibernate hat das Standardwerk "Java Persistence with Hibernate" von Christian Bauer und Gavin King die Messlatte für weitere Bücher zu diesem Thema bereits sehr hoch gelegt und auch "JPA mit Hibernate" muss sich einen Vergleich mit erwähnter "Hibernate-Bibel" gefallen lassen, das didaktisch hervorragend auf nahezu alle Belange in diesem Bereich eingeht und alle wesentlichen Aspekte mit vielen Beispielen illustriert. Das Buch von Röder erreicht leider nicht die Qualität des eben erwähnten. Nichtsdestotrotz würde ich es als sinnvolle Ergänzung und Nachschlagewerk für fortgeschrittene Programmierer sehen. Als Einführungsbuch ist es allerdings nicht zu empfehlen, da es oft zu knapp wesentliche Aspekte behandelt.




