java—处理spring数据存储库引发的异常

ldioqlga  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(183)

在我的springboot应用程序中,我有以下服务方法

@Override
public SourcingOrganisation createOrganisation(
        SourcingOrganisation sourcingOrganisation) {

    try {
        return sourcingOrganisationRepository.save(sourcingOrganisation);
    } catch (DataIntegrityViolationException ex) {
        throw new DomainObjectAlreadyExistsException(ex);
    }
}

哪里 sourcingOrganisationRepository 是的示例 CrudRepository .
如果我想打电话 sourcingOrganisationRepository.save 对于违反唯一索引的数据 DataIntegrityViolationException 引发包含嵌套 ConstraintViolationException ```
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [u_ci_sourcing_organisations_name]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:276) ~[spring-orm-5.3.5.jar:5.3.5]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233) ~[spring-orm-5.3.5.jar:5.3.5]
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:566) ~[spring-orm-5.3.5.jar:5.3.5]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:743) ~[spring-tx-5.3.5.jar:5.3.5]

我试着重复这是一个 `DomainObjectAlreadyExistsException` (因为我有一个全局异常处理程序,它将导致返回409HTTP状态),但是出于某种原因 `catch` 块永远不会执行。我通过在catch块中设置断点来验证这一点,还通过检查抛出异常的调用堆栈中是否有对我的服务类的引用(没有)。
我尝试更改catch块以捕获所有异常,但仍然没有执行。为什么不执行这个catch块,是否有其他方法来转换这个存储库方法抛出的异常?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题