私のコントローラには、2 つのドメイン クラスを更新するアクションがあります。
2番目の更新が失敗した場合、最初の更新がロールバックされ、基本的にエラーが発生した場合、以前のすべてのアクションがロールバックされるようにします。
ここでの基本的な考え方は何ですか?
私のコントローラには、2 つのドメイン クラスを更新するアクションがあります。
2番目の更新が失敗した場合、最初の更新がロールバックされ、基本的にエラーが発生した場合、以前のすべてのアクションがロールバックされるようにします。
ここでの基本的な考え方は何ですか?
ロジックを Service に移動したくない場合 (おそらく、これらの更新の両方を実行するために複数のサービスを呼び出している可能性があるため)、 with で注釈を付けcontroller action
ます@Transactional
。
public MyController {
@Transactional
def save(){
myService.save(params)
myOtherService.save(params)
render "success"
}
...
}
すべてのビジネス ロジックを、既にトランザクション対応のサービスに移動するだけです。最初の更新アクションには 1 つのサービスを使用し、別のアクションには 2 番目のサービスを使用します。
servicesを確認してください。デフォルトではトランザクション対応です。そこで更新を行うだけで、エラーが発生した場合は例外をスローしてコントローラーでキャッチします