Java 如何:允许@Transactional函数调用另一个失败并回滚的@Transactional函数,而不首先回滚@Transactional

Java 如何:允许@Transactional函数调用另一个失败并回滚的@Transactional函数,而不首先回滚@Transactional,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个场景,其中一个@Transactional函数调用另一个,当第二个函数出错时,它从两个函数回滚事务。当第二个失败时,我有没有办法防止第一个回滚?下面只是一个示例,不是真实的场景,但函数A调用B,如果B出错,A尝试将错误写入数据库。在这种情况下,当B失败时,A中的保存由于回滚而失败 职能A: @Transactional public void A(){ try{ String test = B(); }catch(Exception e){ //On

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

职能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();
}

我最近在这里回答了类似的问题。这是否回答了您的问题?B()中的@Transactional(propagation=propagation.REQUIRES_NEW)确实解决了问题,谢谢!