2013-04-22 2 views
0

분명히 트랜잭션 롤백에 대한 도움이 필요합니다. 저는 Spring/JPA/Hibernate 어플리케이션에서 일하고 있습니다. 나를 위해 catch 된 RuntimeException으로 롤백

, RuntimeException 그들이 사로 잡았에도 경우, 다시 트랜잭션을 롤백하고 있습니다. 나는 몇 가지 테스트 (내가 더 이상 필요가 없으므로 여기에 불행히도 넣을 수 없음)와 수치를 통해 이것을 추론합니다.

하지만 다음 코드를 사용하여 또 다른 문제가 발생 해요 :

public class Service implements IService { 

    @Transactional 
    public void test() 
    { 
    // ... 
    try { 
     throw new RuntimeException(); 
    } catch (RuntimeException re) { 
    } 
    foo.setBar(barValue); 
    this.fooDao.save(foo); 
    } 
} 

컨트롤러에서이 작업을 실행 한 후, bar 매개 변수의 변화는 트랜잭션이 롤백 할되지 않았 음을 의미하는 내 데이터베이스에 존재한다.

이제 질문

합니까 롤백에 사로 잡았 RuntimeException의 리드 또는 내가 잘못입니까?

+0

아마도 여기에 무슨 일이 일어나고 있는지 이해하지 못 하겠지만 catch 블록 안에 롤백 코드를 넣을 필요가 없습니까? –

답변

0

예외를 catch하면 트랜잭션이 롤백되지 않습니다. 예외로 인해 메소드가 종료되면 트랜잭션이 롤백됩니다.

+0

감사합니다. 왜 어떤 경우에는 runtimeexception이 catch 되어도 롤백으로 연결되는 이유가 있습니까? – DessDess

+0

코드에서 다른 예외가 발생했을 수 있습니다. –

+0

확실하지 않았으므로 감사 드리겠습니다. – DessDess

관련 문제