首页 > 解决方案 > 如何:允许@Transactional 函数调用另一个失败并回滚的@Transactional 函数而不先回滚@Transactional

问题描述

我有一个场景,其中一个 @Transactional 函数正在调用另一个函数,而当第二个函数出错时,它会从两个函数回滚事务。当第二个失败时,我有没有办法防止第一个回滚?下面只是一个示例,不是真实场景,而是函数 A 调用 B 并且如果 B 错误 A 尝试将错误写入 DB。在这种情况下,当 B 失败时,由于回滚,A 中的保存失败。

功能一:

@Transactional
public void A(){
   try{
       String test = B();
   }catch(Exception e){
      //On error write the error to table
      ExecutionError error = new ExecutionError();
      error.setErrorId(GUIDUtil.uuid());
      error.setErrorMessage(e.getMessage());
      executionErrorDao.save(error);
   }
}

功能 B:

@Transactional
public String B(){
   Person person = new Person();
   person.setPersonId(GUIDUtil.uuid());
   person.setPersonName("Person");
   personDao.save(person);
   return person.getPersonId();
}

标签: javaspringhibernatejpa

解决方案


推荐阅读