java - 如何停用 Spring Data 异常转换

标签 java spring hibernate jpa

新的 org.springframework.orm.hibernate5.HibernateExceptionTranslator 使用 fallthrough,因为它首先尝试使用 vanilla Hibernate (SessionFactoryUtils) 映射异常。如果无法完成转换,它会通过 EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible() 尝试 JPA。

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

那么,确保我们只翻译 Hibernate 异常的正确方法是什么? Afaic HibernateExceptionTranslator 没有关闭 JPA 翻译的选项,LocalSessionFactoryBean 扩展了 HibernateExceptionTranslator 而没有注入(inject)另一个实现的选项。让 HibernateExceptionTranslator JPA 不知道并添加另一个翻译器以防实际使用 JPA 不是更有意义吗?

最佳答案

来自 Spring Data reference :

Using this element looks up Spring Data repositories as described in Creating repository instances. Beyond that it activates persistence exception translation for all beans annotated with @Repository to let exceptions being thrown by the JPA persistence providers be converted into Spring’s DataAccessException hierarchy.

省略 @Repository 注释,然后普通的 Hibernate 异常将不会被翻译。

关于java - 如何停用 Spring Data 异常转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39393116/

相关文章:

java - 使用分页时,在 spring jpa native 查询中,'select count(*) from' 被替换为 'select count(where)'

java - 如何在 Hibernate 查询中使用准备好的语句?

java - Vertx Web 路由 - 多个主体处理程序

java - 无论如何强制线程上下文切换,特别是在像++这样的操作中?

java - 如何通过 JMX 公开 Oracle 连接池统计信息?

java - Oracle 中的 JPA 和 Flyway boolean 类型

java - hibernate : An association from the table application_category refers to an unmapped class: allin. beans1.Application

java - 使用 Kubernetes 的 java-client 创建 CRD

java - 如何组合这些 mysql 语句

java - 防止跨多个服务器重复 POST API 调用