Spring JPA:意外回滚异常隐藏了我需要处理的实际异常

Spring JPA: Unexpected rollback exception hides the actual exception I need to handle

我正在 spring 引导中试验 @transactional。我已经编写了一个包含多个 table 插入的服务,如果有任何异常,我希望整个过程回滚。
这工作正常但不是抛出导致回滚的实际异常,我得到 Unexpected Rollback Exception

@transactional
public void insertIntoTables(){
    repositoryone.save(new Table1());
    repositorytwo.save(new Table2()); //expecting data integrity violation exception on this line
}

上面的代码抛出 Unexpected Rollback Exception 而不是抛出 DataIntegrityViolationException。我当然希望回滚发生,只是想避免异常,以便我可以使用实际的异常。
如何获取用于处理目的的实际异常?

我以前也遇到过类似的问题。我通过添加回滚来处理它。以下是我的处理方式。

  1. 进口org.springframework.transaction.annotation.Transactional
  2. 然后我在服务方法上方使用了@Transactional(rollbackFor = Exception.class) 而不是@Transactional

这将处理任何运行时异常。因此,应该向用户显示 DataIntegrityViolationException。