Ich habe eine @Money
Einschränkung, die angibt, die annotierte Double
Eigentum ist, nun, Geld. Ich schrieb eine ConstraintValidator
, die überprüft, ob eine @Money
Eigenschaft einen gültigen Wert hat, der von einer Currency
Instanz abhängt. Zum Beispiel hat der USD sowohl Dollar- als auch Cent-Werte, während der japanische Yen dies nicht tut. Daher ist der 19,99 ein gültiger Wert für den USD, aber nicht für den JPY. Der Wert Currency
wird in einer anderen Eigenschaft derselben Bean gespeichert.JSR-303: Noch ein weiteres Cross-Field-Validierungsproblem
Das Problem ist die Currency
Eigenschaft einer bestimmten Bohne innerhalb der ConstraintValidator
nachschlagen. Ich habe darüber nachgedacht, es auf Klassenebene zu validieren, aber es wäre ziemlich umständlich und überflüssig, auf Klassenebene zu schreiben, welche Felder Geld sind, und was noch wichtiger ist, Sie können nur eine Fehlermeldung generieren, selbst wenn es mehr als eine Geldeigenschaft gibt das ist ungültig.
Alle Vorschläge, auch Hibernate Validator spezifische sind willkommen.
Danke!
Dies. Verwenden Sie auch niemals Double oder Float für monetäre Werte, verwenden Sie ein long, das den kleinsten Nennwert für das gegebene Currenc zählt. –
Ich dachte eigentlich über diese Lösung nach, wollte aber bei einem primitiven Typ bleiben, da er in persistenten Klassen verwendet wird. Sie können einen benutzerdefinierten Typ in Hibernate beibehalten, indem Sie einige wenige Schnittstellen implementieren, aber nicht sicher sind, ob dies erforderlich ist. Danke trotzdem. –
BTW, Sie können wahrscheinlich 'MoneyValidator' loswerden und ersetzen Sie es durch' @ Valid' Annotation in 'Bid' Klasse und' @ AssertTrue' für 'Money.isValid()' –