자바/JPA
[JPA] 예외 처리 및 JPA 표준 예외 정리
OverTheHorizon3410
2023. 11. 19. 20:58
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