EntityManager는 순수한 JPA 기술이고 스프링과 관계가 없다. 따라서 엔티티 매니저는 예외가 발생하면 JPA 관련 예외를 발생시킨다.
(JPA는 PersistenceException
과 그 하위 예외를 발생시킨다. + IllegalStateException
, IllegalArgumentExcpetion
)
어떻게 JPA 예외를 스프링 예외 추상화 DataAccessException
로 변환할 수 있을까?
-> @Repository
@Repository가 붙은 클래스는 컴포넌트 스캔의 대상이 되고, 예외 변환 AOP의 적용 대상이 된다.
스프링과 JPA를 함께 사용하는 경우 스프링은 JPA 예외 변환기 PersistenceExceptionTranslator
를 등록한다.
예외 변환 AOP 프록시는 JPA 관련 예외가 발생하면 JPA예외 변환기를 통해 발생한 예외를 스프링 데이터 접근 예외로 변환한다.