Autor: Thomas Kammerer

Beitragsbild zu Hibernate beyond OR Mapping

Hibernate beyond OR-Mapping: Envers

Hibernate ist als OR-Mapping-Framework seit Jahren fest in der Java-Welt (und darüber hinaus, siehe NHibernate ) etabliert. Weniger bekannt sind allerdings die zusätzlich enthaltenen Module, mit denen Hibernate dem Entwickler auch über die OR-Mapping-Thematik hinaus das Leben einfacher machen kann. Nachdem sich der erste Beitrag der “Hibernate beyond OR-Mapping” Serie mit dem Thema “Suche” anhand von Hibernate Search beschäftigte, soll hier nun die Versionierung von Geschäftsdaten mittels Hibernate Envers das Thema sein. Envers erweitert Hibernate  um die Historisierung von Entity Beans. Damit lassen sich frühere Bearbeitungsstände (Revisionen) abfragen und Änderung nachvollziehen (wer hat wann was gemacht). Seit der Hibernate-Version 3.5 ist Envers Bestandteil des Core-Moduls. Im  jStage Backendsystem “Stagemanager” wird es für die Historisierung besonders geschäftskritischer Daten, wie z. B. Artikelmengendefinitionen und Benutzerrechte, eingesetzt. Unter Envers erfolgt die Versionierung transparent beim Speichern der entsprechenden Entitäten ohne zusätzlichen Boilerplate-Code. Zudem wird das Auslesen der Historientabellen durch entsprechende API-Methoden unterstützt. Somit bietet der Einsatz von Envers erhebliche Produktivitätsvorteile gegenüber selbstgestrickten Implementierungen. Historisierung Sehen wir uns nun die Historisierung anhand eines Beispiels an. Historisierte Entitäten werden mit der Annotation @Audited gekennzeichnet. …

Hibernate beyond OR-Mapping: Hibernate Search

Hibernate ist als OR-Mapping-Framework seit Jahren fest in der Java-Welt (und darüber hinaus, siehe NHibernate ) etabliert. Weniger bekannt sind allerdings die zusätzlich enthaltenen Module, mit denen Hibernate dem Entwickler auch über die OR-Mapping-Thematik hinaus das Leben einfacher machen kann. Eines dieser Module ist Hibernate Search, das im jStage Backendsystem “Stagemanager” bereits für eine Vielzahl an Suchen verwendet wird. Es setzt auf das objekt-relationale Modell von Hibernate auf und erweitert es um Funktionen zur Implementierung von Volltextsuchen. Unter der Haube steckt dabei die mächtige Such-Bibliothek Lucene. Die Verwendung von Hibernate Search setzt zwar ein gewisses Grundverständnis der Funktionsweise von Lucene voraus, entbindet den Entwickler  aber größtenteils von der Low-Level-Programmierung auf Lucene-Ebene. Sowohl bei der Entwicklung der Indexierung als auch der eigentlichen Suche ergeben sich so signifikante Produktivitätsvorteile gegenüber einer rein auf Lucene basierenden Implementierung. Konfiguration Sehen wir uns zunächst die Definition eines Suchindex in Hibernate Search an. Zunächst müssen wir unser Hibernate Properties File, bzw. unter JPA unsere persistence.xml, um die folgenden Angaben ergänzen.

In der ersten Property definieren wir, dass wir unsere Indizes in einem …