在我的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块,是否有其他方法来转换这个存储库方法抛出的异常?
暂无答案!
目前还没有任何答案,快来回答吧!