在Spring的JdbcTemplate中使用PersistenceExceptionTranslationPostProcessor是否有意义?

时间:2017-04-20 15:28:00

标签: spring hibernate jdbc spring-data spring-data-jpa

标题不言自明。

PersistenceExceptionTranslationPostProcessor是仅用于JPA实现还是与Spring的JdbcTemplate一起使用它?

如果需要两个数据源,每个数据源都有自己的JPA实体管理器和事务管理器,我是否还需要为整个应用程序指定一个PersistenceExceptionTranslationPostProcessor?

2 个答案:

答案 0 :(得分:2)

是的,可以通过在上下文中定义异常转换bean后处理器bean,将Spring异常转换机制透明地应用于所有使用@Repository注释的bean:

<bean id="persistenceExceptionTranslationPostProcessor"
   class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

根据doc

  

Bean后处理器,它自动将持久性异常转换应用于标记有Spring的@Repository的任何bean   注释,添加相应的   PersistenceExceptionTranslationAdvisor到公开的代理(一个   现有的AOP代理或新生成的代理,实现所有   目标的接口)。

     

将本机资源异常转换为Spring的DataAccessException层次结构。自动检测实现的bean   PersistenceExceptionTranslator接口,随后被询问   翻译候选人例外。   所有Spring的适用资源工厂(例如LocalContainerEntityManagerFactoryBean)都实现了   PersistenceExceptionTranslator接口开箱即用。作为一个   结果,启用自动异常通常需要的一切   翻译正在标记所有受影响的bean(例如存储库或   DAO)与@Repository注释,以及定义它   后处理器作为应用程序上下文中的bean。

因此,您可以将它与Jdbctemplate以及任何Jpa供应商实现一起使用

根据文档All of Spring's applicable resource factories (e.g. LocalContainerEntityManagerFactoryBean) implement the PersistenceExceptionTranslator interface out of the box,我认为您仍然需要使用PersistenceExceptionTranslationPostProcessor,因为它用于将持久化过程中生成的所有错误(HibernateExceptions,PersistenceExceptions ...)转换为DataAccessException对象。

答案 1 :(得分:2)

自动奖励赏金错误

~~~正确答案如下~~~

我相信我在这里找到了答案: http://www.deroneriksson.com/tutorials/java/spring/introduction-to-the-spring-framework/component-scanning-and-repository

  

在将异常转换为基于Spring的未经检查的异常时,@ Repository注释可以发挥特殊作用。回想一下,JdbcTemplate为我们处理了这个任务。当我们使用Hibernate时,我们不会使用Spring模板来处理基于Hibernate的异常转换为基于Spring的异常。因此,为了自动处理这种转换,使用@Repository注释的Hibernate DAO将使用PersistenceExceptionTranslationPostProcessor将其Hibernate异常作为Spring异常重新抛出。

进一步阅读:http://www.deroneriksson.com/tutorials/java/spring/introduction-to-the-spring-framework/hibernate-daos

上面的段落明确指出: 回想一下,JdbcTemplate为我们处理了这项任务

所以,回答我自己的问题,没有必要将PersistenceExceptionTranslationPostProcessor与jdbcTemplate一起使用