0

我有一个要求,要从用户界面执行用户操作的事务组。如果以下三项中的任何一项失败,则需要回溯整个3项交易。 1)在一个表中 2)更新另一个表 3)插入数据的数据发送电子邮件给用户群组事务 - 弹簧数据JPA- Boot1.4.2

我试图使用Spring数据JPA,我能达到我的要求?如果没有,请指导如何实现。 如果我用下面的代码,

@RequestMapping(value = "/assets/addEmployeeAsset", method = RequestMethod.POST) 
    public void addEmployeeAsset(@RequestBody EmployeeAsset employeeAsset) { 
     System.out.println("inside addEmployeeAsset restcontroller--"); 
     employeeAssetDao.save(employeeAsset); 
     assetDao.updateAssetAfterAllocation(employeeAsset.getAssetid()); 
     assetService.sendEmail(); 
    } 

public interface EmployeeAssetDao extends CrudRepository<EmployeeAsset, Long> { 
} 

public interface AssetDao extends CrudRepository<Asset,Long>{ 
@Modifying(clearAutomatically = true) 
    @Query(value = "update Asset a SET a.active = ?1 where a.assetid=?2") 
    List<Asset> updateAssetAfterAllocation(String active,String assetid); 
} 

@RestController 
public class AssetService { 
    public void sendEmail(); 
} 
+1

恕我直言,你的设计是错误已...您的控制器应该只是一个转换层/集成层,它应该叫服务层它执行这些动作。你在控制器中的行应该在一个本身应该标记为“@ Transactional”的服务中。从您的控制器调用服务。 –

回答

0

只要把@Transactional注释上述addEmployeeAsset方法

+0

这是非常糟糕的建议......你不应该让你的web层的事务。 –

+0

你的意思是,我们应该将3笔交易在服务类中的一个方法,并把注解吗? –

+0

正确。这样您也可以测试(并重用)您的业务逻辑。您只需要一个不同入口点的适配器/集成(如肥皂Web服务或消息传递网关)。 –