Java 处理Spring数据存储库引发的异常
在我的Spring Boot应用程序中,我有以下服务方法Java 处理Spring数据存储库引发的异常,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,在我的Spring Boot应用程序中,我有以下服务方法 @Override public SourcingOrganisation createOrganisation( SourcingOrganisation sourcingOrganisation) { try { return sourcingOrganisationRepository.save(sourcingOrganisation); } catch (DataIntegrit
@Override
public SourcingOrganisation createOrganisation(
SourcingOrganisation sourcingOrganisation) {
try {
return sourcingOrganisationRepository.save(sourcingOrganisation);
} catch (DataIntegrityViolationException ex) {
throw new DomainObjectAlreadyExistsException(ex);
}
}
其中,sourcingOrganisationRepository
是crudepository
的一个实例
如果我尝试调用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块以捕获所有异常,但仍然没有执行。为什么不执行此捕获块,还有没有其他方法可以转换此存储库方法引发的异常?什么意思是从未调用?@YassinHajaj我的意思是它从未执行过你怎么知道它从未执行过?@YassinHajaj我在最后第二段中解释过这一点只有在调用控制器的方法时才能捕获异常(或在堆栈中的更深处)。您将无法在控制器内或更深的位置捕获它。