我正在尝试在Spring + JPA + Hibernate环境中处理唯一的键约束违规。
我使用PersistenceExceptionTranslationPostProcessor
将PersistenceException
翻译为DataAccessException
。当存在唯一的键约束违规时,我会期望抛出DuplicateKeyException
或DataIntegrityViolationException
,但我获得的是JpaSystemException
,其中包含PersistenceException
。
使用DataAccessException
层次结构的重点是否足够细致,不必查找特定于供应商的错误代码?
如何让Spring将PersistenceException
翻译为更具体的DataAccessException
?
编辑:我注意到DataAccessUtils.translateIfNecessary()中的this.jpaDialect为null。我需要配置一些设置来将this.jpaDialect设置为HibernateJpaDialect吗?
谢谢!
答案 0 :(得分:9)
显然你没有设置jpaDialect
。对于Hibernate,它应该如下所示:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<!-- ... -->
</bean>