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服務或消息傳遞網關)。 –