群组事务 - 弹簧数据JPA- Boot1.4.2
我有一个要求,要从用户界面执行用户操作的事务组。如果以下三项中的任何一项失败,则需要回溯整个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();
}
只要把@Transactional
注释上述addEmployeeAsset方法
这是非常糟糕的建议......你不应该让你的web层的事务。 –
你的意思是,我们应该将3笔交易在服务类中的一个方法,并把注解吗? –
正确。这样您也可以测试(并重用)您的业务逻辑。您只需要一个不同入口点的适配器/集成(如肥皂Web服务或消息传递网关)。 –
恕我直言,你的设计是错误已...您的控制器应该只是一个转换层/集成层,它应该叫服务层它执行这些动作。你在控制器中的行应该在一个本身应该标记为“@ Transactional”的服务中。从您的控制器调用服务。 –