자바 어플리케이션에서 **관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
**이다.
JPA는 라이브러리가 아니고 말 그대로 인터페이스이기 때문에 구현이 존재하지 않는다.
package javax.persistence;
import ...
public interface EntityManager { // 이러한 식으로 인터페이스로 정의되어 있다
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// More interface methods...
}
Hibernate는 **JPA라는 인터페이스의 구현체
**이다.
위에 보이는 EntityManager와 같은 인터페이스를 직접 구현한 라이브러리이다.
Hibernate는 결국 JPA라는 인터페이스의 구현체이기 때문에 굳이 Hibernate를 사용하지 않고
다른 구현체 DataNucleus, EclipseLink 등을 사용해도 된다.
그저 Hibernate가 굉장히 성숙한 라이브러리이기 때문에 사용하는 것이다.
Spring에서 제공하는 모듈 중 하나로 **JPA를 쓰기 편하게 만들어놓은 모듈
**이다.
Spring으로 개발하면서 EntityManager를 직접 사용해본 경험은 없을 것이다.