Jpa
JPA, Hibernate, Spring Data Jpa 관계 정리
무대포 개발자
2020. 11. 21. 18:47
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));
}
}