私のアプリケーション内では、いくつかの方法でアノテーションをいくつか持っています。1つのアプリケーションで複数のSpring @ Transactionアノテーションを使用できますか?
彼らはCrud Repository
を使用して自分のデータベースで削除を実行します。私はで何の段階でこれらの削除が実行されるのだろうと思っていますが、私は@Transactional
注釈がすべて必要ですか?
1.方法1:
@Transactional
public void deleteFromSchemaOne(){
}
1方法2は、後façade method
で呼び出されmethods
を削除例えば
は、ファサードの方法は、その後、runner
で呼び出され2:
2.ファサードの方法でこれらの2つのメソッドの呼び出し:ランナーにファサードメソッドを呼び出す
@Transacational
public void deleteFromAllSchemas(){
deleteFromSchemaOne();
deleteFromSchemaTwo();
}
3を
@Transactional
public void run(String... args) throws Exception {
service.deleteFromAllSchemas();
}
私が知りたいのですがどのようなことです:
私の削除は実際にはのどの段階で実行されますか?メソッドがランナー内で完了したときにはそれがありますか?
EDIT:ループと
ファサード方法:
public void deleteFromAllSchemas() {
for(int i = 0; i < list.size(); i++){
deleteFromSchemaOne();
deleteFromSchemaTwo();
}
}
の線に沿って何かをしたいが、私がやりたいdeleteFromAllSchemas()メソッドは、スキーマ1と2にする必要がありtransactional-すなわちすべてがあることを確認することです削除されるか何もない、どうすればいいのですか?ご協力いただきありがとうございます。 – java123999
これはあなたの 'deleteFromAllSchemas()'の '@ Transactional'で達成されました。エラーが発生した場合、 'deleteFromSchemaOne()'と 'deleteFromSchemaTwo()'で行われた変更をロールバックします。あなたは本当にトランザクションについても読むべきです。彼らはあなたが正しかったり、「仕事で学ぶ」ことを望むだけのものではありません。 – Kayaman
これは正しいです。私は一般的に、トランザクションは可能な限り短くするべきだということを付け加えたいと思います。したがって、これらのデータベースの削除が互いに依存しない限り(1つが失敗した場合、トランザクション全体をロールバックしたいとしましょう)、2つの削除メソッドに注釈を付ける必要があります。これにより、各削除は別のトランザクションで実行されます。彼らがお互いに依存している場合。 @transactional(propagation = Propagation.MANDATORY)で削除メソッドに注釈を付けることができます。 –