问题是关于在crudrepository,jparepository ext中使用多个事务。在我的项目中,有两个实体。 RequestEntity和SendingMailEntity。我的方法中的WorkFlow:

1)保存RequestEntity,

2)发送信息服务(这是我们购买的一项休息服务。我们无法控制其任何异常。)

3)保存SendingMailEntity。

当数字2或3上有异常时,由于受spring jpa控制的回滚,我们丢失了requestEntity。

requestEntity的记录永远不会丢失。

@Transactional
public RequestEntity create(RequestEntity entity) {

    entity=requestRepository.save(entity);
    sendMail(entity);
}

@Transactional(propagation=Propagation.REQUIRES_NEW)
public SendingMailEntity sendMail(RequestEntity entity) {

         /*
          *
          */
   informationService(entity.*,*,*);
         /*
          *
          */

     sendingMailRepository.save(sendingMailEntity);
}


该代码块不起作用。当sendMail出错时,RequestEntity不保存。

最佳答案

处理sendMail中的所有异常,不要让它返回给调用函数。

如果单独的异常处理不起作用,您也可以尝试使用sendMailoverride移到新的公共类中

09-04 12:21