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.
Wir möchten 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 erstellen. Was ich möchte, ist eine BooleanConverter-Klasse, die mit den Werten 'Y' / 'N' oder 'X' / '' instanziiert werden kann.
Dies ist offensichtlich außerhalb der JPA-Spezifikation, aber möglicherweise ist es möglich, EclipseLink-Annotationen / -Konfigurationen zu verwenden. Mit der @Convert -Anmerkung kann ein Konverter anhand seines Namens angegeben werden. Das hört sich gut an, wenn ich ein ynBooleanConverter
und xSpaceBooleanConverter
registrieren kann:
Ist es möglich? Welche anderen Möglichkeiten haben wir?
So verhält sich Ihr Konverter je nach Status im Kontext? Ich denke, ich würde versuchen, die Kontextinformation an eine threadlokale Variable zu binden, die ich in der Konverterimplementierung zurücklesen kann.
Haben Sie Zugriff auf eine CDI-Implementierung? Dann ist es noch eleganter, etwas Bohne mit Ihrer Kontextinfo in Ihre Converter-Implementierung zu injizieren. Du hast erwähnt, dass dir einige session
-Methoden fehlen? Vielleicht hilft dir eine @SessionScope
'ed Bean.
Leider ist @Inject
in einer Konverterklasse nicht angegeben. Sie müssen die Bean "von Hand" nachschlagen, wie in diesem Beitrag erwähnt.
Tags und Links java jpa hibernate eclipselink orm