在Spring中将PersistenceException转换为DataAccessException

我正在尝试在Spring + JPA + Hibernate环境中处理唯一的键约束违规。

我使用PersistenceExceptionTranslationPostProcessorPersistenceException转换为DataAccessException 。 当存在唯一的键约束违规时,我会期望抛出DuplicateKeyExceptionDataIntegrityViolationException ,但我得到的是一个包装PersistenceExceptionJpaSystemException

使用DataAccessException层次结构的重点是,它的细粒度足以不必查找特定于供应商的错误代码吗?

我如何让Spring将PersistenceException转换为更具体的DataAccessException

编辑:我注意到DataAccessUtils.translateIfNecessary()中的this.jpaDialect为null。 我需要配置一些设置来将this.jpaDialect设置为HibernateJpaDialect吗?

谢谢!

显然你没有设置jpaDialect 。 对于Hibernate,它应该如下所示: