在Spring中将PersistenceException转换为DataAccessException

时间:2011-02-25 18:48:34

标签: java spring jpa

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

我使用PersistenceExceptionTranslationPostProcessorPersistenceException翻译为DataAccessException。当存在唯一的键约束违规时,我会期望抛出DuplicateKeyExceptionDataIntegrityViolationException,但我获得的是JpaSystemException,其中包含PersistenceException

使用DataAccessException层次结构的重点是否足够细致,不必查找特定于供应商的错误代码?

如何让Spring将PersistenceException翻译为更具体的DataAccessException

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

谢谢!

1 个答案:

答案 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>