ホームページ > Java > &#&チュートリアル > JPA 2.0/Hibernate でクラスレベルの制約を使用してフィールドの組み合わせを検証する方法

JPA 2.0/Hibernate でクラスレベルの制約を使用してフィールドの組み合わせを検証する方法

Mary-Kate Olsen
リリース: 2024-11-01 21:57:02
オリジナル
819 人が閲覧しました

How to Validate Combinations of Fields Using Class-Level Constraints in JPA 2.0/Hibernate?

JPA 2.0/Hibernate を使用したフィールドの組み合わせの検証

JPA 2.0/Hibernate では、フィールドの組み合わせを検証する必要がある状況に遭遇することがあります。検証される。たとえば、ゲッター getValue1() と getValue2() を含むモデルがあるとします。そのモデルは、両方のゲッターが null でない場合にのみ有効であると見なされます。

このタイプの検証を実行するには、クラスを利用できます。 -level 制約は Bean Validation によって提供されます。クラスレベルの制約は、個々のプロパティではなくオブジェクト インスタンス全体に作用します。

クラス レベルの制約アノテーションの定義

まず、クラス レベルの制約アノテーションを定義します。 @AddressAnnotation など:

<code class="java">@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 {};
}</code>
ログイン後にコピー

制約バリデーターの実装

次に、フィールドの組み合わせを検証する Multi CountryAddressValidator などの制約バリデーターを実装します。

<code class="java">public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> {
    public void initialize(AddressAnnotation constraintAnnotation) {}

    public boolean isValid(Address object, ConstraintValidatorContext context) {
        Country country = address.getCountry();
        // Validation logic based on country-specific rules
        return isValid;
    }
}</code>
ログイン後にコピー

クラスのアノテーション

最後に、検証するクラスにクラスレベルの制約アノテーションを付けます。

<code class="java">@AddressAnnotation
public class MyModel {
    // ...
}</code>
ログイン後にコピー

を利用することで、クラスレベルの制約を使用すると、JPA 2.0/Hibernate でフィールドの組み合わせを効果的に検証し、モデルの整合性を確保できます。

以上がJPA 2.0/Hibernate でクラスレベルの制約を使用してフィールドの組み合わせを検証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート