JPA 예외 처리

박우민·2020년 1월 3일
0

JPA 표준 예외는 크게 2가지로 나눌 수 있음

  • 트랜잭션 롤백을 표시하는 예외
  • 트랜잭션 롤백을 표시하지않는 예외

스프링 프레임워크 상에는 JPA 표준 예외를 변환한 추상화된 예외들이 존재하며, 이를 활용함

JPA 표준 예외는 javax.persistence.PersistenceException을 참고하면 됨
스프링 변환 예외는 org.springframework.dao.

변환 방안

  • aop를 적용하여 JPA 표준예외를 스프링 프레임워크가 추상화한 예외로 변환함
  • PersistenceExceptionTranslationPostProcessor에대한 Bean 등록이 필요

트랜잭션 롤백 시 주의사항

  • DB 롤백이 되었다고 해서, 영속성 컨텍스트 내 엔티티가 롤백된 것은 아님 따라서 영속성 컨텍스트의 초기화가 필요함
  • OSIV를 이용했을 때 이러한 경우가 자주 발생할 수 있음.
    -- 영속성 컨텍스트의 범위를 트랜잭션 범위보다 넓게 사용할 때, 같은 엔티티에 대해 여러 트랜잭션이 발생할 수 있으며, 이때 영속성 컨텍스트를 그대로 사용함에 문제가 발생할 수 있음
    -- DB와 영속성 컨텍스트가 sync되지 않는 상태라면(영속성 컨텍스트가 잘못된 경우), 이를 초기화하여 해결할 수 있음
profile
백앤드 개발자

0개의 댓글