2013-03-19 2 views
0

나는 최대 절전 모드 및 일반적으로 자바 EE에 새로운 오전과 코드의이 작품은 false를 반환하는 이유는 데이터베이스보고에서 내가 트랜잭션이 실제로 커밋 볼 수 있지만 사람이 나에게 말할 수 있는지 궁금 해서요 :transaction.wasCommitted()가 false를 반환하는 이유는 무엇입니까?

session.beginTransaction(); 
    session.saveOrUpdate(user); 
    session.getTransaction().commit(); 
    return session.getTransaction().wasCommitted(); //Always false 

감사합니다.

+0

API javadoc의 경우 :'이 트랜잭션이 성공적으로 커밋되었는지 확인하십시오. 이 메소드는 commit() 호출이 성공한 후에도 false를 리턴 할 수 있습니다. 예를 들어, JTA 기반 전략은 commit() 호출에 no-op를 사용하여 트랜잭션을 시작하지 않으면 호출합니다. 그 경우에는 wasCommitted()를 false로보고합니다. –

+1

커밋은 요청한 직후에 반드시 발생하는 것은 아니기 때문에 (어쩌면 커밋()이 다른 스레드에서 시작됨) 등 ... 어쨌든 방금 한 일에 대해 묻는 것은 의미가 없습니다. 3 = 2 + 1을 수행 한 후). – m0skit0

+0

이상한데, 왜 실제로 작동하지 않는 방법이 있습니까? –

답변

2

wasCommitted()이 성공한 경우에도 true이 항상 인 경우에도 반환하지 않아도됩니다. 이 거래를 통해 트랜잭션이 (명백하게) committed 인 경우 true을 반환합니다. 그렇지 않으면 false입니다. docs에서

: -

이 성공적으로 호출 커밋 후에도 false를 반환 할 수

이 방법을 wasCommitted(). 예를 들어 commit()에 대한 JTA 기반의 전략 no-op는 트랜잭션을 시작하지 않은 경우 을 호출합니다. 이 경우도 wasCommitted()가 false로보고됩니다.

관련 문제