Hibernate ConstraintViolationException VS DataIntegrityViolationException

Hibernate ConstraintViolationException VS DataIntegrityViolationException,hibernate,spring,Hibernate,Spring,我正在编写一个Spring应用程序,似乎当我遇到数据库错误时,有时会抛出Hibernate的ConstraintViolationException,有时会抛出Spring的DataIntegrityViolationException。是否有一个原因可能被抛出而不是另一个?它们的含义不同吗?如果通过HibernateTemplate执行Hibernate调用,那么Spring将把任何Hibernate异常(例如ConstraintViolationException)转换为Spring异常层次

我正在编写一个Spring应用程序,似乎当我遇到数据库错误时,有时会抛出Hibernate的
ConstraintViolationException
,有时会抛出Spring的
DataIntegrityViolationException
。是否有一个原因可能被抛出而不是另一个?它们的含义不同吗?

如果通过
HibernateTemplate
执行Hibernate调用,那么Spring将把任何Hibernate异常(例如
ConstraintViolationException
)转换为Spring异常层次结构(例如
DataIntegrityViolationException
)。如果不使用
HibernateTemplate
,则本机Hibernate异常将通过。两者都是
RuntimeExceptions
,因此不需要显式的异常处理,因此并不总是很明显会看到哪一个异常。

我没有使用
HibernateTemplate
,但只有在主键被违反时,我才会得到Spring的包装异常。其他唯一密钥冲突会导致Hibernate异常。代码是相同的——只有被违反的键的类型才重要。您是否在DAO上使用@Repository注释?