0

私はUIからユーザアクションのために実行されるトランザクションのグループを持つ必要があります。以下のいずれかが失敗した場合は、3つのトランザクション全体をロールバックする必要があります。 1)私は、私は私の要件を達成することができ、春のデータJPAを使用しようとしているユーザーグループトランザクション - スプリングデータJPA-Boot1.4.2

に電子メールを送信する1台 2)別のテーブル 3)のデータを更新してデータを挿入?そうでない場合は、達成方法を指導してください。ただ、@Transactional注釈addEmployeeAsset方法の上に置く

@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

私はコードの下に使用している場合は、あなたのデザインがすでに間違っている私見

+0

これは非常に悪いアドバイスです...あなたはあなたのWeb層をトランザクションにするべきではありません。 –

+0

サービスクラス内の1つのメソッドに3つのトランザクションを移動し、その注釈をそこに置く必要があるということですか? –

+0

正しい。そうすれば、ビジネスロジックをテスト(および再利用)することもできます。別のエントリポイント(soap Webサービスやメッセージングゲートウェイのようなもの)のためのアダプタ/統合だけが必要です。 –

関連する問題