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
'Jpa' 카테고리의 다른 글
jpa nativeQuery 로 오라클 시퀀스 호출 (0) | 2020.12.01 |
---|---|
spring data jpa pk 없이 조회하는법 (0) | 2020.11.26 |
Spring Repository 와 Entity 영속성 컨텍스트의 관계 파악 (0) | 2020.11.19 |
엔티티 매니저 왜 thread-safe 하도록 해야하는지? (0) | 2020.11.18 |
MyBatis, Jpa 2개를 동시에 처리하는 트랜잭션 매니저 (0) | 2020.10.21 |
댓글