Hibernate ORM 5.0 erschienen

Das vermutlich bekannteste Opensource ORM Framework der Java Welt hat nach dreieinhalb Jahren das nächste größere Major-Release-Update erfahren. Für die JPA-Nutzer unter uns ändert sich nicht allzu viel, unter der Haube ist aber doch einiges passiert.

Als JPA-Provider bietet Hibernate 5 nun bessere Einflußmöglichkeiten, die in JPA stark beschränkte automatische ID-Generation (GenerationType#AUTO) zu erweitern. Man kann nun sogar eigene Strategien einbinden oder eine der vielen von Hibernate sowieso angebotenen Varianten verwenden. Dies erhöht die Flexibilität, insbesondere für eine einheitliche Steuerung der ID-Vergabe im Projekt.

Ebenfalls spannend dürfte die angehende Java 8 Kompatibilität sein. In dieser Version darf man sich aber noch nicht zuviel erwarten, es enthält aktuell nur Mapper für die neue DateTime-API. Man kann nun für seine Properties die neuen Datumsklassen verwenden und muss nicht mehr mit handgeschriebenen Konvertierungs-Routinen hantieren. Damit Hibernate ORM noch mit älteren Java Versionen kompatibel bleibt, wurde diese neue Funktionalität in ein dediziertes hibernate-java8 Artefakt ausgelagert. Ab wann Hibernate stärker die Java 8-Features (Lambdas, Streams, …) in seiner API anbietet, ist im Moment nicht klar. Im Hibernates Issue-Tracker finden sich aber weitere Feature-Wünsche, wie zum Beispiel die Idee, Abfragen mit Lambdaausdrücken zu schreiben.

Hibernate bot schon seit langem die Möglichkeit, benutzerdefinierte Datentypen zu mappen, z. B. für Value Objects und Enumerationen. Seit JPA 2.1 gibt es mit den AttributeConvertern eine ähnliche Möglichkeit im Standard, die mit Version 5.0 jetzt besser von Hibernate und seinen Modulen (z. B. Envers) unterstützt wird.

Sollte man Hibernate properitär einsetzen, muss man sich ab sofort mit einer neuen Bootstrap-API auseinandersetzen. Mit ihr wird das Setup der SessionFactory durchgeführt und die bisher verwendete, limitierte Configuration-Klasse abgelöst. Configuration kann zwar auch weiterhin benutzt werden, seine API wurde aber entschlackt und verwendet intern nun auch die Bootstrap-API.

        StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
		.configure( "my-cfg.xml" )
		.build();

        Metadata metadata = new MetadataSources( standardRegistry )
		.addAnnotatedClassName( "de.oio.hibernate.User" )
		.addResource( "de/oio/hibernate/Order.hbm.xml" )
		.getMetadataBuilder()
		.applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE )
		.build();

        SessionFactory sessionFactory = metadata.getSessionFactoryBuilder()
		.build();

Unter der Haube hat sich ebenfalls einiges getan. So wurden die Werkzeuge zur DB-Schema-Erzeugung bzw. Aktualisierung überarbeitet. Zudem gibt es wieder Verbesserungen am OSGi-Support, eine der großen Baustellen von Hibernate 4.x. Weitere Verbesserungen gab es an den Bytecode-Erweiterungen, die Hibernate für die Erzeugung von Proxies (Lazy Loading) verwendet. Desweiteren wurde die Transaction API überarbeitet. Als Anwender betreffen die Neuerungen aber hauptsächlich die Konfiguration. Eine lang ersehnte Funktion ist außerdem die Generifizierung des Session Interfaces. Von JPA sind wir es schon lange gewöhnt und auch bei der nativen Verwendung von Hibernate muss man nun nicht mehr auf die eigentlichen Entitätstypen casten, wenn man Datensätze lädt oder andere CRUD-Operationen verwendet.

        Session session = sessionFactory.getCurrentSession();
        User u = session.get(User.class, 1L);

Auch interessant sind die jetzt standardmäßig enthaltenen GIS-Funktionen (geografische Informationssysteme). Ursprünglich war Hibernate Spatial ein eigenständiges Projekt, welches nun ein Modul von Hibernate ORM geworden ist. Alle die mit räumlichen und geometrischen Daten arbeiten und spezielle Datenbanken-Funktionen nutzen, sollten einen Blick auf diese Funktionalitäten werfen.

Neben Sourceforge werden die Releases nun auch bei BinTray veröffentlicht. Damit folgt man einem Trend vieler anderer Opensource Frameworks, die nach und nach von den alten Opensource-Plattformen weg und hin zu Github und Co. gehen. Der Sourcecode von Hibernate ist übrigens schon länger bei Github.

Weitere Informationen findet man in den Release-Notes und dem Migrationsguide der Dokumentation. In die Dokumentation wurde mit Version 5.0 übrigens auch einiges an Arbeit gesteckt. Sie ist deutlich verbessert, aber auch noch nicht komplett.

Short URL for this post: http://wp.me/p4nxik-2rm
This entry was posted in Java EE, Java Persistence and tagged , , , . Bookmark the permalink.

Leave a Reply