데이터베이스 관리를위한 스프링 관리 서비스 메소드가 있습니다. 여러 개의 insert 문이 있습니다.왜 트랜잭션은 RuntimeException에서 롤백하지만 SQLException은 롤백하지 않습니다.
두 번째 삽입을 호출하기 전에 예외를 throw하는 두 가지 단위 테스트가 있습니다. 예외가 RuntimeException이면 트랜잭션이 롤백됩니다. 예외가 SQLException 인 경우 첫 번째 삽입이 지속됩니다.
나는 당황하고 있습니다. 누구나 트랜잭션이 SQLException에 롤백되지 않는 이유를 말해 줄 수 있습니까? 누구든지 이것을 관리하는 방법을 제안 할 수 있습니까? 나는 SQLException을 잡아서 RuntimeException을 던질 수있다. 그러나 그것은 이상하게 보인다.
스카프 만의 대답과 Nathan의 팁에 따르면 DAO 레이어에서 모든 SQLExceptions를 발견했으며이를 Spring의 SQLExceptionTranslator를 사용하여 체크되지 않은 DataAccessExceptions로 변환했습니다. 이 Spring 포럼 게시물, http://forum.springsource.org/showthread.php?63549- Conceptual-context-information 및 Robert Martin의 오류 처리 장 "Clean Code, 민첩한 소프트웨어 장인 정신 안내서"(Prentice Hall, 2008)) 또한 체크되지 않은 예외를 던지면 더 좋은 모듈성을 유지하는 이유를 명확히하는 데 도움이되었습니다. – climmunk