2011-08-26 2 views
0

Spring + Hibernate + Struts 애플리케이션에 대해 PROPAGATION_REQUIRED 선언적 트랜잭션 관리 접근법을 사용했다. StaleObjectException (서비스가 시작된 곳에서) (의도 된) StaleObjectException을 잡을 수 있습니다. 업데이트를 수행하는 서비스 메소드에는 중첩 호출 인 Foo1, Foo2, Foo3이 있습니다. 나는이 방법들에서 예외를 잡기를 원한다. 그렇게하려면 어떻게해야합니까? 모든 대안 또는 해결 방법?Spring 선언적 트랜잭션 관리에서의 Hibernate 예외 처리

답변

4

이 예외는 발생하지 않아야합니다. Hibernate reference documentation에서 : 세션 SQLException이 포함 예외를 throw하면

, 즉시 데이터베이스 트랜잭션을 롤백은 Session.close() 를 호출하고 Session 인스턴스를 폐기시켜야한다. Session의 특정 메소드는 세션을 일관된 상태로 두지 않습니다. 에 의해 던진 예외 없음 최대 절전 모드는 복구 가능으로 처리 될 수 있습니다.

이것은 예외를 잡아 내거나 다른 종류의 예외로 래핑하는 것 외에 예외를 잡는 것이 도움이되지 않는다는 것을 의미합니다. 세션을 사용하면 어쨌든 예상대로 작동하지 않습니다.

낙천적 잠금 예외 처리가 논의되는 다른 질문은 How to deal with locks (JPA)?을 참조하십시오.

+0

글쎄, 나는 당신에게 동의한다. 그러나 나는 거래의 일부를 다시 시도하고 싶다. 그게 좋은 생각이 아닌 것 같니? 전체 과정을 반복해야합니까? [사용자가 본 성능에 히트 수 있습니다] –

+0

수 없습니다. 다시 시도하고 싶다면 (대부분의 경우 나쁜 생각이다. 특히 최종 사용자가 관련된 유스 케이스 인 경우), 새로운 Hibernate 세션을 사용하여 트랜잭션을 롤백하고 새 트랜잭션을 다시 시작해야한다. –

+0

괜찮습니다. 고맙습니다. 나는 그렇게해야 할 것 같아. –