2011-10-18 6 views
1

Hibernate Validator 3.Xから4.Xへのアップグレード後にDataIntegrityViolationExceptionが発生しない理由を理解できません。Hibernate Validator 4へのアップデート後、SpringのDataIntegrityViolationExceptionを取得できません

何とかSpringは永続化レイヤーの例外をもう一度ラップすることができません。

バリデータの依存関係以外は変更されていませんが、検証違反が発生した場合にDataIntegrityViolationExceptionがスローされることを検証するテストはもう行われません。 代わりに、代わりにjavax.validation.ConstraintViolationExceptionが発生しました。

もちろん、まだ を含めてすべてがそのまま残りますが、それ以上翻訳は行われません。

助けてください!

答えて

3

JPA-2.0仕様によると、クラスパスにJSR-303バリデーター実装(つまり、Hibernate Validator 4.x)が存在する場合、エンティティを永続化する前に自動的にJSR-303検証がトリガーされます。

だから、あなたのエンティティは、Hibernate Validatorによって拒否され、データベースに得ることはありません、ので、データベースの整合性制約に違反していないとDataIntegrityViolationExceptionがスローされていない、とあなたは、JSR-303のConstraintViolationException代わりに取得します。

あなたのpersistence.xml

<validation-mode>NONE</validation-mode> 

を追加することで、このデフォルトの動作を無効にすることができます。

0

それは私の心を吹き飛ばしますが、あなたは正しいです。

私は検証をオフにすると有効に検証の2種類がありますように、私はまだ「検証」を取得し、代わりにDataIntegrityViolationException根本的な原因PropertyValueExceptionを得るための、私はorg.hibernate.exception.ConstraintViolationExceptionを取得し、でもjavax.validation.ConstraintViolationException

期待できないので、それが見えますHibernate Validatorによって。あなたが示すように、新しいBean検証によってデフォルトで有効になっているのは、「データベース前」です。 しかし、とにかく<validation-mode>NONE</validation-mode>の有無にかかわらず、私のログには常にクエリが表示されます。 Hibernateのロギングのためにデータベースにアクセスできない可能性がありますが、実際に何が起こっているのか分かりません。

<validation-mode>NONE</validation-mode>を使用しない検証との検証の違いは何ですか? AFAIKの文書でそれについて何も見つかりませんでした。

関連する問題