2017-01-03 2 views
0

많은 데이터에서 일부 처리를 수행하므로 루프를 수행합니다. 10 항목 I 루프, 마지막에 오류가 발생할 경우다중 쿼리 및 트랜잭션

@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) { 
     } 

    } 
} 

ProcessPaymentException은 예외에게

을 확장합니다. 모든 항목이 롤백되었거나 (모든 항목) 오류가있는 항목 만 있습니까?

+1

쉽게 동작을 테스트 할 수 있습니다. 대답은 'db에 저장'의 구현에 따라 달라집니다. – iamiddy

+0

스프링 데이터 저장소의 저장 방법 만 해당됩니다. –

답변

0

이 경우 롤백되지 않습니다. 그것은 예외를 잡았고 Spring 트랜잭션 경계를 통과하지 못했기 때문입니다.

Read here in Spring Docs :

트랜잭션의 작업이 에 현재의 컨텍스트에서 실행되는 코드에서 예외가 발생한다 롤백하는 Spring 프레임 워크의 트랜잭션 인프라에 표시하기 위해 권장되는 방법 거래. Spring 프레임 워크의 트랜잭션 인프라 코드는 을 호출 스택 위로 버블 링하고 롤백을 위해 트랜잭션을 표시할지 여부를 결정하므로 처리되지 않은 예외를 catch합니다.