사용자 도구

사이트 도구


springframework:jpa

문서의 이전 판입니다!


SpringFramework와 JPA

EntityManager 주입

// EntityManager의 프록시 주입
@PersistenceContext EntityManager em;

예외 변환(Hibernate 연동에서도 동일)

  • DAO 클래스에 @Repository 어노테이션을 부여한다.
  • PersistenceExceptionTranslationPostProcessor를 등록해줘야 한다.
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
  • 예외 변환이 정확하게 이뤄지지는 않지만 OptimisticLockingFailureException은 제대로 된다.
  • 현재, Spring Data JPA를 사용하고 있는데, 빈 등록을 명시적으로 안해도 PersistenceExceptionTranslationPostProcessor가 자동 등록되고 있다. 느낌상으로는 XML 설정시에 어떠한 설정하나가 자동으로 등록해주는 듯 하다. JavaConfig 설정시에는 직접 해줘야 하는 것 같다. → 맞음
  • Spring Data JPA Java Config시에는 PersistenceExceptionTranslationPostProcessor를 직접 등록해줘야 하는 것으로 보인다.
  • 거의 모든 리소스 팩토리(LocalContainerEntityManagerFactoryBean 포함) 대부분 PersistenceExceptionTranslator를 직접 구현하고 있어서 Translator 자체를 따로 등록할 필요는 없다.
  • TODO 안해도 되는 것으로 보임 테스트 해 볼 것. Exception Translator 직접 등록 필요
    // Hibernate의 경우
    @Bean
    public HibernateExceptionTranslator hibernateExceptionTranslator() {
        return new HibernateExceptionTranslator();
    }

OpenEntityManagerInView

  • View 까지 Lazy Loading이 작동하려면 OpenEntityManagerInView를 적용해야 한다. 이는 Hibernate의 OpenSessionInView와 같다. Filter나 Interceptor 중에 선택하여 적용한다.
  • org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor
  • org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
springframework/jpa.1420028570.txt.gz · 마지막으로 수정됨: 2014/12/31 21:22 저자 kwon37xi