Hibernate検証アノテーション-少なくとも1つのフィールドがnullでないことを検証します

Resh32:

ここ定義されているアノテーションを使用してHibernate検証ルールを定義する方法はありますか?少なくとも1つのフィールドはnullであってはならないことを述べていますか?

これは架空の例です(@OneFieldMustBeNotNullConstraint実際には存在しません)。

@Entity
@OneFieldMustBeNotNullConstraint(list={fieldA,fieldB})
public class Card {

    @Id
    @GeneratedValue
    private Integer card_id;

    @Column(nullable = true)
    private Long fieldA;

    @Column(nullable = true)
    private Long fieldB;

}

示されているケースでは、fieldAをnullにするか、fieldBをnullにすることができますが、両方はできません。

1つの方法は、独自のバリデーターを作成することですが、既に存在する場合は回避したいと思います。バリデータを既に作成している場合は、1つ共有してください...ありがとうございます!

Resh32:

私はついにバリデーター全体を書きました:

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;

import org.apache.commons.beanutils.PropertyUtils; 

@Target( { TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = CheckAtLeastOneNotNull.CheckAtLeastOneNotNullValidator.class)
@Documented
public @interface CheckAtLeastOneNotNull {

     String message() default "{com.xxx.constraints.checkatleastnotnull}";

        Class<?>[] groups() default {};

        Class<? extends Payload>[] payload() default {};

        String[] fieldNames();

        public static class CheckAtLeastOneNotNullValidator implements ConstraintValidator<CheckAtLeastOneNotNull, Object> {

            private String[] fieldNames;

            public void initialize(CheckAtLeastOneNotNull constraintAnnotation) {
                this.fieldNames = constraintAnnotation.fieldNames();
            }

            public boolean isValid(Object object, ConstraintValidatorContext constraintContext) {


                if (object == null)
                    return true;

                try {

                    for (String fieldName:fieldNames){
                        Object property = PropertyUtils.getProperty(object, fieldName);

                        if (property!=null) return true;
                    }

                    return false;

                } catch (Exception e) {
                   System.printStackTrace(e);   
                    return false;
                }
            }

        }

}

使用例:

@Entity
@CheckAtLeastOneNotNull(fieldNames={"fieldA","fieldB"})
public class Reward {

    @Id
    @GeneratedValue
    private Integer id;

    private Integer fieldA;
    private Integer fieldB;

    [...] // accessors, other fields, etc.
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

cerberus:オプションのフィールドが少なくとも1回発生することを検証します

分類Dev

次の検証は、フィールドをnullにできないことを意味しますか?(@Sizeアノテーション)

分類Dev

入力する少なくとも1つのフィールド、重力フォームを検証します

分類Dev

Codeigniterフォームの検証-少なくとも1つのフィールドが必要です

分類Dev

Hibernateを使用しないJava Bean検証の代替アノテーション

分類Dev

Laravel「少なくとも1つ」フィールドの検証が必要

分類Dev

Ruby onRailsのフォームに少なくとも1つのフィールドが存在することを検証する方法

分類Dev

ノックアウト検証-少なくとも1つのフィールドに値があり、少なくとも1つのチェックボックスがチェックされています

分類Dev

フォームフィールドで少なくとも1つの値が変更されるまで検証が機能しない状態でフォームを更新します-Angular-ReactiveForms

分類Dev

CakePHP3検証を使用して少なくとも1つのフィールドが設定されているかどうかを確認する

分類Dev

リアクティブフォームを使用してAngular7で「少なくとも1つのフィールドに入力する必要がある」検証を設定するにはどうすればよいですか?

分類Dev

symfonyフォームの検証時に2つのフィールドの少なくとも1つが空でないかどうかを確認します

分類Dev

Flask WTForms:少なくとも1つのフィールドの検証InputRequired

分類Dev

Laravelはフォーム配列内の少なくとも1つのアイテムを検証します

分類Dev

2つのフィールドのうち少なくとも1つは検証を完了する必要があります

分類Dev

検証日-Bean検証アノテーション-特定の形式

分類Dev

リレーションシップにRSpecに少なくとも1つのエントリがあることを検証していることをテストするにはどうすればよいですか?

分類Dev

HTMLの少なくとも1つの入力フィールドを検証するためにどのように確立できますか?

分類Dev

フォームを検証して、グループ内で少なくとも1つのラジオボタンがチェックされていることを確認します

分類Dev

Dojo データグリッドに少なくとも 1 つの行があることを検証する

分類Dev

Yii REST Updateでは、フォームモデルの検証に少なくとも1つのフィールドが必要です

分類Dev

Jooq と JPA の @Column アノテーションを利用したフィールド長の検証

分類Dev

Rails-少なくとも1つのフィールドがnullであることを確認できません

分類Dev

チェックボックスの検証-少なくとも1つが選択されていることを検証します

分類Dev

dtoスプリングブートの3つのフィールドのうち少なくとも1つを検証する

分類Dev

Ajaxを介してdjangohtmlテンプレートで少なくとも1つのチェックボックスがオンになっていることを検証します

分類Dev

null値のJava検証@min @maxアノテーション

分類Dev

相互検証を使用する場合、各フォールドに真のクラスのインスタンスが少なくともいくつか含まれていることを確認する方法はありますか?

分類Dev

Laravel少なくとも1つのフィールドが必要です

Related 関連記事

  1. 1

    cerberus:オプションのフィールドが少なくとも1回発生することを検証します

  2. 2

    次の検証は、フィールドをnullにできないことを意味しますか?(@Sizeアノテーション)

  3. 3

    入力する少なくとも1つのフィールド、重力フォームを検証します

  4. 4

    Codeigniterフォームの検証-少なくとも1つのフィールドが必要です

  5. 5

    Hibernateを使用しないJava Bean検証の代替アノテーション

  6. 6

    Laravel「少なくとも1つ」フィールドの検証が必要

  7. 7

    Ruby onRailsのフォームに少なくとも1つのフィールドが存在することを検証する方法

  8. 8

    ノックアウト検証-少なくとも1つのフィールドに値があり、少なくとも1つのチェックボックスがチェックされています

  9. 9

    フォームフィールドで少なくとも1つの値が変更されるまで検証が機能しない状態でフォームを更新します-Angular-ReactiveForms

  10. 10

    CakePHP3検証を使用して少なくとも1つのフィールドが設定されているかどうかを確認する

  11. 11

    リアクティブフォームを使用してAngular7で「少なくとも1つのフィールドに入力する必要がある」検証を設定するにはどうすればよいですか?

  12. 12

    symfonyフォームの検証時に2つのフィールドの少なくとも1つが空でないかどうかを確認します

  13. 13

    Flask WTForms:少なくとも1つのフィールドの検証InputRequired

  14. 14

    Laravelはフォーム配列内の少なくとも1つのアイテムを検証します

  15. 15

    2つのフィールドのうち少なくとも1つは検証を完了する必要があります

  16. 16

    検証日-Bean検証アノテーション-特定の形式

  17. 17

    リレーションシップにRSpecに少なくとも1つのエントリがあることを検証していることをテストするにはどうすればよいですか?

  18. 18

    HTMLの少なくとも1つの入力フィールドを検証するためにどのように確立できますか?

  19. 19

    フォームを検証して、グループ内で少なくとも1つのラジオボタンがチェックされていることを確認します

  20. 20

    Dojo データグリッドに少なくとも 1 つの行があることを検証する

  21. 21

    Yii REST Updateでは、フォームモデルの検証に少なくとも1つのフィールドが必要です

  22. 22

    Jooq と JPA の @Column アノテーションを利用したフィールド長の検証

  23. 23

    Rails-少なくとも1つのフィールドがnullであることを確認できません

  24. 24

    チェックボックスの検証-少なくとも1つが選択されていることを検証します

  25. 25

    dtoスプリングブートの3つのフィールドのうち少なくとも1つを検証する

  26. 26

    Ajaxを介してdjangohtmlテンプレートで少なくとも1つのチェックボックスがオンになっていることを検証します

  27. 27

    null値のJava検証@min @maxアノテーション

  28. 28

    相互検証を使用する場合、各フォールドに真のクラスのインスタンスが少なくともいくつか含まれていることを確認する方法はありますか?

  29. 29

    Laravel少なくとも1つのフィールドが必要です

ホットタグ

アーカイブ