Spring + Hibernate + Struts 애플리케이션에 대해 PROPAGATION_REQUIRED 선언적 트랜잭션 관리 접근법을 사용했다. StaleObjectException
(서비스가 시작된 곳에서) (의도 된) StaleObjectException
을 잡을 수 있습니다. 업데이트를 수행하는 서비스 메소드에는 중첩 호출 인 Foo1, Foo2, Foo3이 있습니다. 나는이 방법들에서 예외를 잡기를 원한다. 그렇게하려면 어떻게해야합니까? 모든 대안 또는 해결 방법?Spring 선언적 트랜잭션 관리에서의 Hibernate 예외 처리
0
A
답변
4
이 예외는 발생하지 않아야합니다. Hibernate reference documentation에서 : 세션 SQLException이 포함 예외를 throw하면
, 즉시 데이터베이스 트랜잭션을 롤백은 Session.close() 를 호출하고 Session 인스턴스를 폐기시켜야한다. Session의 특정 메소드는 세션을 일관된 상태로 두지 않습니다. 에 의해 던진 예외 없음 최대 절전 모드는 복구 가능으로 처리 될 수 있습니다.
이것은 예외를 잡아 내거나 다른 종류의 예외로 래핑하는 것 외에 예외를 잡는 것이 도움이되지 않는다는 것을 의미합니다. 세션을 사용하면 어쨌든 예상대로 작동하지 않습니다.
낙천적 잠금 예외 처리가 논의되는 다른 질문은 How to deal with locks (JPA)?을 참조하십시오.
글쎄, 나는 당신에게 동의한다. 그러나 나는 거래의 일부를 다시 시도하고 싶다. 그게 좋은 생각이 아닌 것 같니? 전체 과정을 반복해야합니까? [사용자가 본 성능에 히트 수 있습니다] –
수 없습니다. 다시 시도하고 싶다면 (대부분의 경우 나쁜 생각이다. 특히 최종 사용자가 관련된 유스 케이스 인 경우), 새로운 Hibernate 세션을 사용하여 트랜잭션을 롤백하고 새 트랜잭션을 다시 시작해야한다. –
괜찮습니다. 고맙습니다. 나는 그렇게해야 할 것 같아. –