Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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_Spring Transactions - Fatal编程技术网

Java Spring数据事务控制

Java Spring数据事务控制,java,spring,spring-boot,spring-data-jpa,spring-transactions,Java,Spring,Spring Boot,Spring Data Jpa,Spring Transactions,问题是关于在Crudepository、jparepository ext中使用多个事务。在我的项目中,有两个实体。RequestEntity和SendingMailEntity。我的方法中的工作流: 1) 保存请求实体 2) 发送信息服务(这是我们购买的rest服务,我们无法控制任何异常。) 3) 保存SendingMailEntity 当2号或3号出现异常时,由于SpringJPA控制的回滚,我们丢失了requestEntity requestEntity的记录永远不会丢失 @Transac

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

1) 保存请求实体

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

3) 保存SendingMailEntity

当2号或3号出现异常时,由于SpringJPA控制的回滚,我们丢失了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中的所有异常,不要让它返回调用函数


此外,您还可以尝试将
sendMail
移动到具有
覆盖的新公共类中
,如果单独的异常处理不起作用

如果您无法控制“informationService”,那么为什么要将其包括在事务中。如果整个过程不是原子的,那么将失败的代码从事务中分离出来,或者正确地处理异常。您是否尝试过传播=不支持我尝试过,但它不起作用。实际上,这是关于改掉旧习惯。当使用hibernate会话时,我们可以根据需要在线提交或回滚。我无法控制spring数据。