2011-10-18 28 views
1

我无法理解为什么从Hibernate Validator 3.X升级到4.X后,我没有再收到DataIntegrityViolationException。更新到Hibernate Validator 4后无法获取Spring的DataIntegrityViolationException 4

不知何故Spring不能够覆盖持久层例外了。

除Validator依赖关系外没有任何变化,但验证违反验证违规情况下不会通过DataIntegrityViolationException引发的测试。 我现在得到了一个javax.validation.ConstraintViolationException。

一切仍然存在,当然包括 但翻译不再发生。

帮助欢迎!

回答

3

根据JPA-2.0规范,如果在类路径中存在JSR-303验证器实现(即Hibernate验证器4.x),则在持久化实体之前会自动触发JSR-303验证。

因此,您的实体被Hibernate Validator拒绝,并且不会进入数据库,因此不会违反数据库完整性约束,并且不会抛出DataIntegrityViolationException,您将得到JSR-303的ConstraintViolationException

您可以通过添加

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

persistence.xml禁用此默认行为。

0

它打动了我的思想,但你是对的。

如果我关闭验证,我仍然得到和,而不是得到DataIntegrityViolationException根源PropertyValueException“验证”,我得到org.hibernate.exception.ConstraintViolationException,甚至没有预期的javax.validation.ConstraintViolationException

因此,它看起来像有2种验证启用通过Hibernate验证器。你似乎表明,新的Bean验证默认启用的是'pre database'。 但无论如何,无论有没有<validation-mode>NONE</validation-mode>,我的日志总是显示查询。可能是因为Hibernate日志记录他们没有将它传送到数据库,但我对真正发生的事情感到迷茫。

验证没有<validation-mode>NONE</validation-mode>和验证之间有什么区别。在文档AFAIK中没有发现任何关于此的内容。

相关问题