JPA: Parametrisierte Instanzen von AttributeConverter

8

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:

%Vor%

Ist es möglich? Welche anderen Möglichkeiten haben wir?

    
sinuhepop 07.10.2015, 16:50
quelle

2 Antworten

1

Probieren Sie @ObjectTypeConverter aus:

%Vor%     
Ish 07.10.2015 19:38
quelle
0

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.

    
frifle 26.10.2015 12:53
quelle

Tags und Links