JPA 예외의 기본 구조
- JPA 표준 예외는
javax.persistence.PersistenceException
의 자식 클래스
- 해당 예외 클래스는 RuntimeExcetion 의 자식임.
- 언체크 예외
JPA 예외의 분류
- 트랜잭션 롤백을 표시하는 예외
- 심각한 예외로 강제로 커밋도 안됨.
- 롤백 X
- 개발자가 커밋할지 롤백할지 선택이 가능하다.
- 아래부터는 책에 있던 에러내역을 표기한다.
- 참고
트랜잭션 롤백을 표시하는 주요 예외들
javax.persistence.EntityExistsException
:EntityManager.persist(..)
호출 시 동일한 엔티티가 이미 있을 때 발생.
javax.persistence.EntityNotFoundException
:EntityManager.getReference(..)
호출 후 실제 사용 시 엔티티가 존재하지 않을 때 발생.refresh(..)
,lock(..)
에서도 발생할 수 있음.
javax.persistence.OptimisticLockException
: 낙관적 락 충돌 시 발생.
javax.persistence.PessimisticLockException
: 비관적 락 충돌 시 발생.
javax.persistence.RollbackException
:EntityTransaction.commit()
실패 시 발생. 롤백이 표시된 트랜잭션 커밋 시에도 발생.
javax.persistence.TransactionRequiredException
: 트랜잭션이 필요한 상황에서 없을 때 발생. 주로 트랜잭션 없이 엔티티를 변경할 때 발생.
트랜잭션 롤백을 표시하지 않는 주요 예외들
javax.persistence.NoResultException
:Query.getSingleResult()
호출 시 결과가 하나도 없을 때 발생.
javax.persistence.NonUniqueResultException
:Query.getSingleResult()
호출 시 결과가 두 개 이상일 때 발생.
javax.persistence.LockTimeoutException
: 비관적 락에서 시간 초과 시 발생.
javax.persistence.QueryTimeoutException
: 쿼리 실행 시간 초과 시 발생.
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 쓰기 지연와 JDBC 의 배치 (0) | 2023.11.19 |
---|---|
[JPA] 쓰기 지연의 장점 등 (0) | 2023.11.19 |
[JPA] 트랜잭션 롤백 시 주의 해야할 점! (0) | 2023.11.19 |
[JPA] 영속성 컨텍스트가 같을 때의 엔티티의 비 (0) | 2023.11.19 |
[JPA 갑자기 궁금증 해결] DataJpa 에서 save 내부 동작 방식 (0) | 2023.11.19 |