Wir entwickeln eine Anwendung, die mit einer Legacy-Datenbank verbunden ist. Dies ist sehr "untypisiert" und verwendet Strings für fast alle Daten. Was noch schlimmer ist, ist, dass es weit davon entfernt ist, homogen zu sein: Es verwendet verschiedene Muster für Daten oder Zeiten ('YYDDMM', 'HHMMSS', Millisekunden) und boolesche ('Y'/'N', 'X'/''), z Beispiel.JPA: Parametrisierte Instanzen von AttributeConverter
Wir wollen JPA (EclipseLink) und benutzerdefinierte Konverter verwenden. Das Problem ist, dass @Convert
eine Klasse erwartet, die AttributeConverter
implementiert, also müssen wir neue Klassen für jedes Muster machen. Was ich möchte, ist eine BooleanConverter-Klasse, die mit Werten 'Y'/'N' oder 'X'/'' instanziiert werden kann.
Dies ist offensichtlich außerhalb der JPA-Spezifikation, aber vielleicht ist es möglich, EclipseLink Annotationen/Konfiguration zu verwenden. Mit der Anmerkung @Convert kann ein Konverter namentlich angegeben werden. Das klingt gut für mich, wenn ich einen ynBooleanConverter
und xSpaceBooleanConverter
registrieren:
// Unfortunately, this method does not exist :(
Session.addConverter('ynBooleanConverter', new BooleanConverter("Y", "N"));
@Entity
public class MyEntity {
@Convert("ynBooleanConverter")
private Boolean myBoolean;
...
}
Ist es möglich? Welche anderen Möglichkeiten haben wir?
ist es für Sie geeignet JPA 2.1 Konverter zu verwenden? verfügbar ab Eclipselink Version 2.5? –
Ich kann die letzte Version von EclipseLink verwenden, aber ich kann nicht sehen, wie ich es lösen kann. – sinuhepop