2017-01-03 13 views
0

私は多くのデータを処理していますので、私はループを行います。複数のクエリとトランザクション

@Transactional 
@Override 
public void processPayment(List<Long> paymentsId, PaymentModeEnum paymentMode) throws ProcessPaymentException{ 
    ... 
    processCreditCardPayment(payments); 
} 

private void processCreditCardPayment(List<Payment> payments) throws ProcessPaymentException { 
    for (Payment payment : payments) { 

     try { 
       //save to db 
     }catch (ProcessPaymentException ppe) { 
     } 

    } 
} 

10項目のIループは、最後の1に、エラーが発生した場合ProcessPaymentExceptionは例外

を拡張します。 すべてがロールバックされています(すべてのアイテム)、またはエラーが発生したもののみですか?

+1

簡単に動作をテストできます。その答えは、 'save to db'の実装に依存していると言われています – iamiddy

+0

バネデータリポジトリからの保存方法のみです。 –

答えて

0

この場合、何もロールバックされません。あなたが例外をキャッチし、Springのトランザクションの境界を渡さなかったからです。

Read here in Spring Docs

トランザクションの作業がロールバックされる インフラが にあるのSpring Frameworkのトランザクションに指示する推奨方法は、現在の コンテキストで実行されているコードからの例外をスロートランザクション。 Springフレームワークのトランザクション インフラストラクチャコードは、呼び出しスタックの上に のバブルが発生したときに未処理の例外をキャッチし、 トランザクションにロールバックをマークするかどうかを決定します。

関連する問題