Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理Spring数据存储库引发的异常_Java_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java 处理Spring数据存储库引发的异常

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

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

@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我在最后第二段中解释过这一点只有在调用控制器的方法时才能捕获异常(或在堆栈中的更深处)。您将无法在控制器内或更深的位置捕获它。