如何停用Spring Data异常翻译

时间:2016-09-08 14:07:14

标签: java spring hibernate jpa

org.springframework.orm.hibernate5.HibernateExceptionTranslator在使用vanilla Hibernate(SessionFactoryUtils)首次尝试映射异常的意义上使用了一个漏洞。如果无法进行翻译,则通过EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible()尝试JPA。

后者使我们感到困扰,因为它正在将IllegalStateException翻译为InvalidDataAccessApiUsageException。我不确定为什么IllegalStateExceptionIllegalArgumentException会得到这种特殊待遇,但还可以。所以现在我们突然结束了以前没有翻译的翻译异常。由于这些额外的翻译是在JPA的上下文中(因为它被称为convertJpaAccessExceptionIfPossible),这也没有意义,因为我们没有使用JPA而是使用vanilla Hibernate。

那么,确保我们只获得翻译的Hibernate异常的正确方法是什么?虽然HibernateExceptionTranslator没有选项可以关闭JPA翻译而LocalSessionFactoryBean扩展HibernateExceptionTranslator但没有注入其他实现的选项。让HibernateExceptionTranslator JPA不知道并且在实际使用JPA的情况下添加另一个翻译器会更有意义吗?

2 个答案:

答案 0 :(得分:1)

来自Spring Data reference

  

使用此元素查找Spring Data存储库,如中所述   创建存储库实例。除此之外,它激活了持久性   使用@Repository注释的所有bean的异常转换   JPA持久性提供程序抛出的异常将被转换   进入Spring的DataAccessException层次结构。

省略@Repository注释,然后vanilla Hibernate异常不会被翻译。

答案 1 :(得分:0)

请参阅https://jira.spring.io/browse/SPR-14681了解相应的答案