Ich verwende die JPA 2.0 / Hibernate-Validierung, um meine Modelle zu validieren. Ich habe jetzt eine Situation, in der die Kombination von zwei Feldern validiert werden muss:
public class MyModel {
public Integer getValue1() {
//...
}
public String getValue2() {
//...
}
}
Das Modell ist ungültig , wenn beide getValue1()
und getValue2()
sind null
und gültig anders.
Wie kann ich diese Art der Validierung mit JPA 2.0 / Hibernate durchführen? Mit einer einfachen @NotNull
Anmerkung müssen beide Getter ungleich Null sein, um die Validierung zu bestehen.
java
jpa
jpa-2.0
bean-validation
Daniel Rikowski
quelle
quelle
Antworten:
Für die Überprüfung mehrerer Eigenschaften sollten Sie Einschränkungen auf Klassenebene verwenden. Aus Bean Validation Sneak Peek Teil II: Benutzerdefinierte Einschränkungen :
quelle
TYPE
undRUNTIME
sollte ersetzt werdenElementType.TYPE
undRetentionPolicy.RUNTIME
sind.import static java.lang.annotation.ElementType.*;
undimport static java.lang.annotation.RetentionPolicy.*;
Um mit Bean Validation ordnungsgemäß zu arbeiten , könnte das in der Antwort von Pascal Thivent bereitgestellte Beispiel wie folgt umgeschrieben werden:
quelle
isoA2Code
ist in der DB-Country
Tabelle gespeichert . Ist es eine gute Idee, von hier aus einen DB-Aufruf zu tätigen? Außerdem möchte ich sie nach der Validierung verknüpfen, daAddress
belongs_to
aCountry
und ich möchten, dass deraddress
Eintragcountry
den Fremdschlüssel der Tabelle enthält. Wie würde ich das Land mit der Adresse verknüpfen?@ValidAddress
Anmerkung für das Country-Objekt festlegen , wird eineNo validator could be found for constraint 'com.example.validation.ValidAddress' validating type 'com.example.Country'
Ausnahme angezeigt.Ein benutzerdefinierter Validator auf Klassenebene ist der richtige Weg, wenn Sie die Bean Validation-Spezifikation beibehalten möchten (Beispiel hier) .
Wenn Sie gerne eine Hibernate Validator-Funktion verwenden, können Sie @ScriptAssert verwenden , das seit Validator-4.1.0.Final bereitgestellt wird. Ausgenommen von seinem JavaDoc:
Beispiel:
quelle