Dienstag, 16. November 2010

Tag 2: 13:30 - 16:30: What's new in Hibernate

Direkt nach dem Mittagessen kam die dreistündige Hibernate-Druckbetankung. Viel Material zu alten Bekannten und neuen Projekten im Hibernate-Ökosystem.

Das objekt-relationale Mapping (ORM) wird um interessante Eigenschaften erweitert. Beim Mapping von Ids (besonders bei der Abbildung vvon Objektbeziehungen) gibt es jetzt Unterstützung über die Annotation @MapsId. Bei zusammengesetzten Schlüsseln können die Ids der daran beteiligten Attribute auf unterschiedliche Weise generiert werden (partial generation). BEim lesenden und schreibenden Zugriff auf Klassenattribute (Tabellenspalten) kann über die Annotation @ColumnTransformer der Wert verändert werden. Das Thema "Lazy Loading" kann nun zusätzlich mit sogenannten Fetch profiles feingranularer konfiguriert werden.

Die Criteria API versucht seit jeher einen objektorientierten, typsicheren und DB-neutralen Zugriff auf die Datenbasis zu ermöglichen. Hier wurde anhand von Codebeispielen der Umgang mit
  • Lazy Loading (default, übersteuerbar mit fetch())
  • Aliases
  • Joins
  • CriteriaBuilder.createTupleQuery()
  • Subqueries und
  • Views
gezeigt.

Ergänzt wurde dies mit Hinweisen zu Änderungen in Hibernate 3.6, u. a.:
  • 2nd Level Cache und die Verwendung von Infinispan
  • CGLIB ist deprecated (stattdessen Verwendung von Javassist)
  • Das Packaging (die Modularisierung) wurde angepasst
  • Kein Support mehr für Java 1.4
Dann folgte die Vorstellung von Hibernate Search. Dieses Projekt erlaubt Anwendungen die Durchführung von Volltextsuchen auf der eigenen Datenbasis (auch und gerade in Datenbanken). Hibernate Search basiert auf Lucene und verwendet die Criteria API (s. o.). Objekte, die über diese Suche gefunden werden sollen, können mit @Indexed, @Fields und @Field annotiert werden.

Ein kleiner Ausflug war Hibernate Spacial. Dieses Projekt hat sich zum Ziel gesetzt, eine auf einfache Weise nutzbare Geo-Suche in Java zu ermöglichen. Auch hier kommt wieder die Criteria-API zum Einsatz.

Mit Hibernate Envers wurde ein Projekt vorgestellt, das sich der Hidstorisierung von Daten widmet. Grundidee: Bestehende Tabellen werden nicht verändert. Je Tabelle wird eine Audit-Tabelle ergänzt, welche die historisierten Daten enthält. Jeder historisierte Datensatz wird dort komplett abgelegt und bekommt eine DB-global eindeutige Versionsnummer (wie in SVN). Damit das funktiuoniert muss Hibernate Envers natürlich in den Classpath, Event Listener müssen ergänzt und die zu versionierenden Entity-Klassen mit @Audited annotiert werden.

Aber wie kommt man an historisierte Daten wieder heran? Heirzu wurden drei Varianten vorgestellt:
  • Gezieltes Finden über Revision number: Hier gibt es eine spezielle find-Methode mit Angabe der Entity-Klasse, seiner Id und der gesuchten Revision number.
  • Query über Revision number: Hier gibt es eine spezielleforEntityAtRevision-Methode mit Angabe der Entity-Klasse und der gesuchten Revision number.
  • Query über Entity history: Hier gibt es eineforRevisionOfEntity -Methode.
Nett: die Audit-Tabellen können individuell erweitert werden.

Mit der Vorstellung von Hibernate Validator ging's weiter. Dies ist die Bean-Validation-Referenz-Implementierung. Ziel: Definition EINER Stelle, an der für sämtliche Anwendungsteile (GUI, BLog) die Validierung von Domain-Objekten erfolgt. Der Fokus des Vortrages lag hier bei den Neuerungen, als da wären:
  • Neue Annotation @ScriptAssert: Ermöglicht auf Klassenebene eine Datenvalidierung mit Hilfe von Skripten.
  • Es gibt eine API, welche die direkte Programmierung der Constraints ermöglicht.
  • Method level validation, im Sinne einer Prüfung von Pre- und Post-Conditions. So ein bisschen, wie AOP-Advices, nur eleganter.
Den Abschluss bildete ein Einblick in Hibernate OGM. Hierbei handelt es sich vereinfacht audsgedrückt um ein Database grid management, welches newben Infinispan auch auf Teiid basiert.

Das war Druckbetankung pur, gab einem aber einen umfassenden Einblick in das, was das Hibernate Ökosystem leistet. In Teilen verwenden wir einzelne Projekte davon ja bereits. Interessant ist Hibernate Envers: Dies könnte den Eigenbau in unseren Produkten ersetzen...

Keine Kommentare:

Kommentar veröffentlichen