JPA 2.0/Hibernate でのフィールドの組み合わせの検証
JPA 2.0/Hibernate 検証を使用する場合、複数のフィールドを組み合わせる必要があります。たとえば、フィールド getValue1() と getValue2():
public class MyModel {
public Integer getValue1() {
//...
}
public String getValue2() {
//...
}
}
getValue1() と getValue2() の両方が null で、無効なデータであることを示す場合、モデルは無効であると見なされます。
クラスレベルの制約: 解決策
このような検証を処理するために、JPA 2.0/Hibernate はクラスレベルの制約を提供します。これらの制約は、個々のプロパティではなくクラス インスタンス全体に作用します。このアプローチにより、相互に関連するフィールドを柔軟に検証できます。
制約の定義
フィールドの組み合わせを検証するために、AddressAnnotation という名前のクラス レベルの制約を定義します。 @Target を ElementType.TYPE に設定して、この制約を特定のプロパティではなくクラスに適用します:
@Constraint(validatedBy = MultiCountryAddressValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AddressAnnotation {
String message() default "{error.address}";
Class>[] groups() default { };
Class extends Payload>[] payload() default { };
}
バリデーターの実装
次に、バリデーター実装 Multi CountryAddressValidator を作成します。このクラスはオブジェクト インスタンスを受け取り、結合フィールド検証を実行します。
public class MultiCountryAddressValidator implements ConstraintValidator {
...
// Implement the isValid() method to define the validation logic
}
この実装では、オブジェクト インスタンスの複数のフィールド (この場合はアドレス) にアクセスし、必要な検証ルールを適用できます。
モデル クラスのアノテーション
最後に、MyModel クラスに AddressAnnotation の注釈を付けます:
@AddressAnnotation
public class MyModel {
...
}
クラスレベルの制約を利用すると、Hibernate 検証を使用して堅牢かつ柔軟な方法でフィールドの組み合わせを効果的に検証できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3