JPA 2.0/Hibernate で複数のフィールドを組み合わせて検証する
JPA 2.0/Hibernate を使用してデータ検証を実行する場合、検証が必要になる場合があります。データの整合性を確保するために複数のフィールドを組み合わせます。たとえば、getValue1() と getValue2() という 2 つのフィールドを持つモデルを考えてみましょう。両方のフィールドが null の場合、モデルは無効とみなされますが、それ以外の場合は有効です。
複数フィールド検証のクラスレベルの制約
複数のプロパティを組み合わせて検証するには、次のことができます。クラスレベルの制約を利用します。 Bean Validation 仕様を使用すると、個々のプロパティではなくクラス全体に適用するカスタム制約を定義できます。このアプローチにより、複数のフィールドへのアクセスを必要とする複雑な検証を柔軟に実行できます。
クラス レベルの制約を定義する方法
クラス レベルの制約を定義するには、次の手順に従います。これらの手順:
サンプル実装
以下は、 getValue1() と getValue2() の組み合わせを検証するためのクラス レベルの制約:
<code class="java">@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = MyModelConstraintValidator.class) public @interface MyModelConstraint { String message() default "{error.invalidModel}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } public class MyModelConstraintValidator implements ConstraintValidator<MyModelConstraint, MyModel> { public void initialize(MyModelConstraint constraintAnnotation) {} public boolean isValid(MyModel object, ConstraintValidatorContext context) { // Perform validation logic here return !(object.getValue1() == null && object.getValue2() == null); } }</code>
クラス レベルの制約の適用
MyModel クラスにアノテーションを付けます。クラスレベルを適用する @MyModelConstraint アノテーションconstraint:
<code class="java">@MyModelConstraint public class MyModel { public Integer getValue1() { ... } public String getValue2() { ... } }</code>
MyModel インスタンスを検証するときに、フレームワークは MyModelConstraintValidator を適用し、モデルが有効であるとみなされる前に getValue1() と getValue2() の両方が null でないことを確認します。
以上がJPA 2.0/Hibernate を使用して複数のフィールドを組み合わせて検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。