2012-03-19 14 views
3

JSR303検証グループ継承

A =新しいA()を呼び出します。 validator.validate(a、All.class);

myStringはnullであり、notNullグループはすべてを拡張しますが、そうではありませんので、無効にする必要があります。私がバリデータのHibernate impl(4.0.2.GA)を使用していることに注意してください。

答えて

5

あなたの期待は、仕様が必要とするものから後ろ向きです。与えられたインターフェースZについては

、グループ(注釈要素群は、インタフェースZが含まれているIE)Zまたはのスーパーインタフェースのいずれかに属するものとしてマークされた制約:spec(PDF 27ページ)から、 Z(継承されたグループ)のグループZ.すなわち

の一部とみなされ、あなたがSection1.classで検証し、All.class@NotNullをタグ付けした場合、制約が適用されます。しかし、それ以外の方法ではありません。セットとしてその

思う:All制約の共通集合であり、Allを拡張することによって、Section1Allスーパーセット、ないサブセットとなります。したがって、Allを使用して検証すると、Allおよびそのスーパーインタフェースで指定されたものだけが適用されます。

あなたはAllSection1で見つかった制約のスーパーセットになりたい場合は、あなたが相続を反転する必要があります。この意味で

interface All extends Section1 /*, Section2, Section3...*/ {} 

、あなたはAllのすべてを継承することを自分自身に言うことができますSection1の制約。

Javaは特定のインターフェースを拡張する人を見つけることを非常に困難にします(結局のところ、クラスファイルは参照されるまで利用できないかもしれませんが)。所定のインターフェースが伸びる。

+0

+1その素晴らしい説明です。私が全体のコンセプトに持っている問題は、Defaultグループに自分のセクションを拡張させることができないということだけです。ですから、デフォルトグループにすべてを検証させたいときは、別のグループを使用するどこにでも追加する必要があります。少なくとも私はそう思った。デフォルトグループを再定義できることが分かりました。http://beanvalidation.org/1.0/spec/#constraintdeclarationvalidationprocess-groupsequence-redefiningdefaultgroup – Gandalf

関連する問題