본문 바로가기
Jpa

JPA, Hibernate, Spring Data Jpa 관계 정리

by 무대포 개발자 2020. 11. 21.
728x90
반응형

JPA, Hibernate, Spring Data Jpa 관계 정리

JPA
  • JPA 는 Java Persistence API 의 약자로, 자바 에서 RDB 를 사용하는 방식을 정의한 인터페이스
  • 구현체 없음.

Hibernate

  • JPA 를 구현한 구현체.
  • 꼭 Hibernate 를 안써도 됨. 다른 JPA 구현체 써도 됨.

Spring Data JPA

  • JPA 를 쓰기 편하게 만들어놓은 모듈
  • 원래 JPA 를 사용하기 위해서는 EntityManager 를 사용해야하는데. Spring Data Jpa 에서는 EntityManager 를 사용 X
  • 대신 Repository 를 사용하며, Spring 내부에서 Repository 로 선언된 것들을 스캔하며, 구현체를 만들어준다.
    • 이 구현체 내부에는 JPA 를 사용하는 로직이 들어가있겠지.
  • 예를 들면, Repository 인터페이스를 구현한 SimpleJpaRepository 를 보면 아래와 같음.
    • 아래 로직을 보면 EntityManager 를 사용하는 것을 볼 수 있음.
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {

    private final EntityManager em;

    public Optional<T> findById(ID id) {

        Assert.notNull(id, ID_MUST_NOT_BE_NULL);

        Class<T> domainType = getDomainClass();

        if (metadata == null) {
            return Optional.ofNullable(em.find(domainType, id));
        }

        LockModeType type = metadata.getLockModeType();

        Map<String, Object> hints = getQueryHints().withFetchGraphs(em).asMap();

        return Optional.ofNullable(type == null ? em.find(domainType, id, hints) : em.find(domainType, id, type, hints));
    }

}

Reference

댓글