DataAccessException
* 일관된 예외처리를 하기 위함.
* SQLException이나 HibernateException등과 같은 특정 기술에 의존적인 예외를 던지지 않음.
* 모든 DAO Exception은 org.springframework.dao.DataAccessException의 서브 클래스.
* 데이터 접근 인터페이스가 구현에 의존적인 예외가 아닌 스프링의 일반적인 예외를 던짐으로서,
persistence 구현에 결합되는 일을 방지.
* RuntimeException이기 때문에 비검사 예외(unchecked Exception)에 속함.
-> DAO 에서 던진 예외를 코드에서 반드시 처리하지 않아도 된다는 의미.
-> 검사 예외 (checked Exception)은 과도한 catch나 throws절을 불러 코드를 난잡하게 할 수 있다는
스프링의 일반적인 철학을 따르는 것.
* NestedRuntimeException의 서브클래스.
-> 항상 NestedRuntimeException의 getCause()메서드를 통해 루트 예외인 Exception을 사용할 수 있다.
* Spring은 DAO 지원에 관한 특정 기술에 대한 예외들을 인식하며, 각 데이터베이스 제품의 에러 코드까지 인식.
* 자신의 예외 분류 체계에 있는 좀 더 특정한 예외중의 하나를 사용하여 다시 던질 수 있다.
---------------------------------------------------------------------------------------------------------------------
** CleanupFailureDataAccessException
=> 성공적으로 작동한 후 데이터베이스 자원을 반환할 때 발생하는 경우 (Connection 반환 등)
** DataAccessResourceFailureException
=> 데이터베이스 연동 실패 등 접근 실패
** DataIntegrityViolationException
=> 유일키 제약 (Unique Constraint) 위반과 같은 정합성 위반이 삽입 (Insert) / 갱신 (Update)의 결과로
발생한 경우
** DeadlockLoserDataAccessException
=> 현재의 프로세스가 교착상태(deadlock)에 빠진 경우
** IncorrectUpdateSemanticsDataAccessException
=> 원하는 수보다 많은 레코드를 갱신하는 등 갱신 작업에 있어서 의도하지 않은 어떤 일이 발생하는 경우.
@ 트랜잭션이 롤백 되지 않음!
** InvalidDataAccessApiUsageException
=> 실행되기 전에 컴파일 되어야 할 질의문의 컴파일에 실패하는 등 데이터 접근 자바 API를 잘못 사용하는 경우
** InvalidDataAccessResourceUsageException
=> 관계형 데이터베이스 접근을 위해 잘못된 SQL 문법을 사용하는 등 자원에 대한 접근을 잘못하는 경우
** OptimisticLockingFailureException
=> 낙관적 잠금(optimistic locking)에 실패한 경우. 이 예외는 ORM 툴이나 커스텀 DAO 구현체에 의해 발생된다.
* 낙관적 잠금(optimistic locking)
동일한 데이터에 정확히 동시에 접근하는 일이 발생할 확률이 매우 낮을 것이라고 낙관하여 배타적 잠금을 하지 않는, 즉 데이터에 대한 동시 접근을 허용하는 정책
** TypeMismatchDataAccessException
=> String을 데이터베이스의 숫자 컬럼에 삽입하려고 하는 등 자바 타입과 데이터 타입이 일치하지 않는 경우
** UncategorizedDataAccessException
=> 무엇인가 잘못됐지만 좀 더 구체적으로 판별할 수 없는 경우
-- 원본 : http://blog.naver.com/archy712/37944946
'DATABASE > SQL' 카테고리의 다른 글
오라클 TABLE, FUNCTION, PROCEDURE 검색 (0) | 2017.12.08 |
---|---|
WHERE절 우선순위 (0) | 2017.12.05 |