JPA 2.0/Hibernate でフィールドの組み合わせを検証するにはどうすればよいですか?

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

How to Validate Combinations of Fields in JPA 2.0/Hibernate?

JPA 2.0/Hibernate でのフィールドの組み合わせの検証

JPA 2.0/Hibernate 検証を使用する場合、複数のフィールドを組み合わせる必要があります。たとえば、フィールド getValue1() と getValue2() を持つモデルを考えてみましょう:

<code class="java">public class MyModel {
    public Integer getValue1() {
        //...
    }
    public String getValue2() {
        //...
    }
}</code>
ログイン後にコピー

getValue1() と getValue2() の両方が null で、無効なデータを示す場合、モデルは無効であると見なされます。

クラスレベルの制約: 解決策

このような検証を処理するために、JPA 2.0/Hibernate はクラスレベルの制約を提供します。これらの制約は、個々のプロパティではなくクラス インスタンス全体に作用します。このアプローチにより、相互に関連するフィールドを柔軟に検証できます。

制約の定義

フィールドの組み合わせを検証するために、AddressAnnotation という名前のクラスレベルの制約を定義します。 @Target を ElementType.TYPE に設定して、この制約を特定のプロパティではなくクラスに適用します。

<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> {
    ...
    // Implement the isValid() method to define the validation logic
}</code>
ログイン後にコピー

この実装では、オブジェクト インスタンスの複数のフィールド (この場合はアドレス) にアクセスし、必要な検証ルールを適用できます。

モデル クラスに注釈を付ける

最後に、MyModel クラスに AddressAnnotation で注釈を付けます。

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

クラスレベルの制約を利用することで、効果的に検証できます。 Hibernate 検証を使用して、堅牢かつ柔軟な方法でフィールドを組み合わせます。

以上がJPA 2.0/Hibernate でフィールドの組み合わせを検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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