Java 无法获取Spring';更新到Hibernate验证程序4后出现的DataIntegrityViolationException异常

Java 无法获取Spring';更新到Hibernate验证程序4后出现的DataIntegrityViolationException异常,java,spring,bean-validation,Java,Spring,Bean Validation,我不明白为什么在从Hibernate Validator 3.X升级到4.X之后,我再也没有得到DataIntegrityViolationException 不知何故,Spring不再能够包装持久层异常 除了验证程序依赖项之外,没有任何更改,但是验证DataIntegrityViolationException是否在验证冲突的情况下抛出的测试不再通过。 现在我得到了一个javax.validation.ConstraintViolationException 一切都还在,当然包括 但是翻译不再

我不明白为什么在从Hibernate Validator 3.X升级到4.X之后,我再也没有得到DataIntegrityViolationException

不知何故,Spring不再能够包装持久层异常

除了验证程序依赖项之外,没有任何更改,但是验证DataIntegrityViolationException是否在验证冲突的情况下抛出的测试不再通过。 现在我得到了一个javax.validation.ConstraintViolationException

一切都还在,当然包括 但是翻译不再发生了


欢迎光临

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

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

您可以通过添加

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

对你的
persistence.xml

我很震惊,但你说得有点对

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

因此,Hibernate Validator似乎启用了两种验证。您似乎指出,新Bean验证默认启用的是“pre-database”。 但不管怎样,无论是否有
NONE
,我的日志总是显示查询。可能是因为Hibernate日志记录,他们无法进入数据库,但我有点不知道到底发生了什么

不使用
NONE
的验证与使用
的验证有什么区别。在AFAIK文件中找不到任何关于这方面的信息