springframework/Spring Data JPA

Spring Data JPA : JPA Repository

Jungsoomin :) 2020. 11. 18. 17:27

@Configuration 설정클래스에 @EnableJpaRepositories 를 사용해야 JpaRepository 를 상속 받은 프록시 Bean 을 제공한다.

  • 스프링 부트는 기본적으로 제공하는 기능이기에 사용하지 않아도 된다.
  • EntityManager , TransactionManager, PackageScan 시작 점 들을 등록할 수 있는게 @EnableJpaRepositories

JpaRepository 의 구현체인 SimpleJpaRepository@Repository 어노테이션이 붙어있는데 @Repository 를 붙이는 것은 중복

  • @Repository 어노테이션이 붙게 되면 SQLException JPAException 등을 Spring 내부적으로 DataAccessException 으로 변환한다.
// 빈 이름이 겹치는 상황
@Repository("jpaPostRepository")
public interface PostRepository extends JpaRepository<Post,Long> {
}
@DataJpaTest
class PostRepositoryTest {

    @Autowired
    @Qualifier("jpaPostRepository")
    private PostRepository postRepository;

    @Test
    public void crud(){
        Post post = new Post();
        post.setTitle("jpa");
        postRepository.save(post);

        List<Post> all = postRepository.findAll();
        assertThat(all.size()).isEqualTo(1);
    }

}

하이버네이트 내부 Exception . 이름과 사유가 직관 적이다.

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()

SpringFramework 내부 적으로 DataAccessException 으로 변환한 모습.

org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save()