複数のフィールドを組み合わせて検証する
JPA 2.0/Hibernate では、複数のフィールドに対する単純な @NotNull アノテーションは個々のフィールドのみを検証します。フィールドの組み合わせを検証するには、クラス レベルの制約の使用を検討してください。
「Bean Validation Sneak Peek」パート II: カスタム制約で説明されているように、クラス レベルの制約を使用すると、オブジェクト内の複数のプロパティに検証ロジックを適用できます。 。これは、複数のフィールドに依存する複雑な検証ルールに特に役立ちます。
実装
クラスレベルの制約を実装するには、アノテーション (@AddressAnnotation) と制約を定義します。バリデータ (Multi CountryAddressValidator)。アノテーションは適用する検証ルールを指定し、バリデーターはフィールドの組み合わせを検証するロジックを実装します。
@AddressAnnotation public class Address { @NotNull @Max(50) private String street1; @Max(50) private String street2; @Max(10) @NotNull private String zipCode; @Max(20) @NotNull String city; @NotNull private Country country; } public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> { public boolean isValid(Address object, ConstraintValidatorContext context) { // Validate zipcode and city depending on the country // ... } }
バリデーターでは、オブジェクト インスタンスが isValid メソッドに渡され、すべてのフィールドへのアクセスが許可されます。検証目的のフィールド。バリデーターは、郵便番号と市区町村の相関関係など、フィールド間の相互依存関係をチェックできます。
使用法
一度定義すると、クラスレベルの制約を適用できます。アノテーションを使用したモデル クラス:
@AddressAnnotation public class MyModel { public Integer getValue1() { //... } public String getValue2() { //... } }
このアノテーションは、getValue1() と getValue2() の組み合わせを検証するために Multi CountryAddressValidator を使用する必要があることを示します。両方のフィールドが null の場合、モデルは無効であるとみなされます。それ以外の場合、モデルは有効です。
以上がJPA 2.0/Hibernate で複数のフィールドを組み合わせて検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。