2016-09-08 2 views
3

새로운 org.springframework.orm.hibernate5.HibernateExceptionTranslator은 vanilla Hibernate (SessionFactoryUtils)를 사용하여 예외를 매핑하려고한다는 의미에서 fallthrough를 사용합니다. 번역 할 수 없으면 EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible()을 통해 JPA를 시도합니다.스프링 데이터 예외 변환을 비활성화하는 방법

IllegalStateExceptionInvalidDataAccessApiUsageException으로 번역 할 때 후자가 문제가됩니다. 나는 왜 IllegalStateExceptionIllegalArgumentException이이 특별한 대우를 받는지에 관해 정말로 확신하지 않고있다. 그러나 ok. 그래서 지금 우리는 갑자기 번역되지 않은 번역 된 예외로 끝납니다. 이러한 여분의 변환은 JPA의 컨텍스트에 있기 때문에 (convertJpaAccessExceptionIfPossible이라고 함) JPA가 아니라 바닐라 최대 절전 모드이므로이 기능도 의미가 없습니다.

따라서 우리는 Hibernate 예외 만 변환되도록하는 올바른 방법은 무엇입니까? Afaic HibernateExceptionTranslator에는 JPA 변환을 해제하는 옵션이없고 LocalSessionFactoryBeanHibernateExceptionTranslator으로 확장되어 다른 구현을 삽입 할 수있는 옵션이 없습니다. HibernateExceptionTranslator JPA를 인식하지 않고 JPA가 실제로 사용되는 경우 다른 번역기를 추가하는 것이 더 합리적이지 않습니까? 봄 데이터 reference에서

답변

1

: 만들기 저장소 인스턴스에 설명 된대로

이 요소를 사용하여 봄 데이터 저장소를 검색합니다.JPA 지속성 제공자에 의해 던져지는 예외가 스프링의 DataAccessException 계층으로 변환되도록@Repository로 주석 된 모든 빈에 대한 예외 변환을 활성화합니다.

@Repository 주석을 생략하면 바닐라 최대 절전 모드 예외가 번역되지 않습니다.

관련 문제