[JPA] 예외 처리 및 JPA 표준 예외 정리

JPA 예외의 기본 구조

  • JPA 표준 예외는
    • javax.persistence.PersistenceException의 자식 클래스
    • 해당 예외 클래스는 RuntimeExcetion 의 자식임.
    • 언체크 예외

JPA 예외의 분류

  1. 트랜잭션 롤백을 표시하는 예외
    • 심각한 예외로 강제로 커밋도 안됨.
  1. 롤백 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