© Excellent backgrounds/Shutterstock.com
Konvertierungen mithilfe von JPA Attribute Converters

Aus A mach B


Mit dem Java Persistence API verfügt die Java-Enterprise-Welt über eine weit verbreitete Spezifikation für die standardisierte Speicherung und den Zugriff auf Daten in einer Datenbank. Aber was ist, wenn die Standardpersistierung nicht ausreicht und eine spezielle Persistierung einer Eigenschaft erforderlich ist? Bis einschließlich JPA 2.0 war dies im Rahmen der Spezifikation nur schwierig zu erreichen und wurde durch die Einführung von Attribute Converters in JPA 2.1 stark vereinfacht.

Mit dem Java Persistence API 2.1 [1] wurde das Konzept der Attribute Converters eingeführt, mit denen eine Konvertierung für einzelne Eigenschaften einer Entität auf einfache Weise möglich ist. Ausgeschlossen von der Konvertierung sind dabei alle Bestandteile der ID, Versions- und Beziehungseigenschaften sowie explizit als Enumerated oder Temporal gekennzeichnete Eigenschaften. Die Konvertierung wird für jeden Zugriff auf die konvertierte Eigenschaft berücksichtigt, sodass die Konvertierung nicht nur beim Lesen und Schreiben, sondern auch beim Ausführen von Abfragen zum Tragen kommt. Die Konvertierung erfolgt dabei für den Entwickler vollständig transparent.

janssen_1.tif_fmt1.jpgAbb. 1: Schematische Darstellung der Verwendung des Attribute Converters

Die offensichtlichste Verwendung eines Konverters ist natürlich die Persistierung eines nicht unterstützten Datentyps, aber auch die Umwandlung eines unterstützten Datentyps in eine andere Darstellung ist denkbar (z. B. [2]).

Im Rahmen dieses Artikels wird beispielhaft ein Konverter vorgestellt, der Objekte der Klasse java.awt.Color in Objekte der Klasse java.lang.String umwandelt. Dieser wird anschließend verwendet, um die durch die RectangleEntity (Listing 1) abgebildeten Rechtecke mit Größen- und Farbinformationen in der Datenbank zu speichern, und um nach Rechtecken mit einer vorgegebenen Farbe zu suchen. Dazu wird bei allen Schreiboperationen der Attribute Converters aufgerufen, um die Eigenschaft der Entität in einen String umzuwandeln. Bei allen Leseoperationen wird der Attribute Converter verwendet, um den String wieder in ein Objekt vom Typ java.awt.Color zu konvertieren (Abb. 1).

Um Attribute Converters verwenden zu können, wird eine JPA-2.1-Implementierung benötigt, z. B. EclipseLink ab Version 2.5 [3] (JPA-2.1-Referenzimplementierung) oder Hibernate ab Version 4.3 [4]. Für das Beispiel wurde ein Wildfly-8.1.0.Final-Applikationsserver [5] mit Hibernate 4.3.5 verwendet. Der hier in Auszügen dargestellte Quellcode steht auf GitHub zur V...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang