実行時にクラスごとに特定の制約/注釈を無効にすることはできますか?たとえば、@NotNull
のチェックをfirstName
フィールドに設定したいと思ったら、それは可能でしょうか?実行時にhibernate検証アノテーションを動的に無効にしますか?
これは、他のすべての制約をオフにして、その制約をチェックするだけで、特定の制約が正しくトリガーされているかどうかをテストすることになります。
実行時にクラスごとに特定の制約/注釈を無効にすることはできますか?たとえば、@NotNull
のチェックをfirstName
フィールドに設定したいと思ったら、それは可能でしょうか?実行時にhibernate検証アノテーションを動的に無効にしますか?
これは、他のすべての制約をオフにして、その制約をチェックするだけで、特定の制約が正しくトリガーされているかどうかをテストすることになります。
実行時にクラスごとに特定の制約/注釈をオフにすることはできますか? たとえば、 firstNameフィールドの@NotNullチェックを有効にしたい場合、それは可能ですか?
いいえ、それはありません。 Bean検証ではこのような機能は定義されていません。 Hibernate Validator HV-98には、メタデータのリロードの可能性について論じているオープンな問題がありますが、そこでさえバリデーター・ファクトリを再構築する必要があります。
注釈をXML設定で上書きし、その時点で別の設定を使用してValidator(Factory)
インスタンスを再作成することはできますが、それはおそらく簡単には管理できません。
私は他のすべての 制約をオフにして、ただ1つの制約をチェックすることができ、これは、一定の制約が が正しくシンプルなトリガであるかどうかを確認するためのテストになるだろう。
テストの場合は、Validator.validateValue
を使用して特定のフィールドの検証だけができます。それ以外にも、オブジェクトグラフ全体を検証し、一連の制約違反を取り戻すならば、それらを反復してメタデータを検査することができます。特定の制約が実行され、失敗したことを検証するのに十分な情報がメタデータに存在します。
通常、hibernate検証アノテーションはデータベースの制約と一緒に使用されるため、実行時に動作を変更するのは意味がありません。しかし、もしあなたがそれをやりたいのであれば、(既存のものを上書きすることによって)独自のバリデーターを実装し、必要なものを実行することができます。
自分でアノテーションを実装するとします。実行時にどのようにオフにするのですか? – Ole
フィールドを1つだけ検証する場合は、ホワイトリストのようなものを作成し、バリデータ内のフィールド名をそのチェックリストに対してチェックする必要があります。ホワイトリストはシングルトンとして実装できます。バリデーターの内部でフィールド名を取得することはそれほど簡単ではありません。さらに、ペイロードオブジェクトを使用してバリデーターにフィールド名を渡すこともできます。 –
OK - ありがとう - 私はそれが些細な行為ではないと考えました。おそらく、検証の注釈を最小限に保ち、ハイバーネーションの外でタイプレベルの検証を実行します。 – Ole
Perfect - Validator.validateValueは、私が探していたものです。ありがとう。 – Ole