hibernate
가 실제로 JPA의 Interface를 구현한 구현부이다.
EclipseLink 또한 JPA의 구현부이지만, hibernate를 가장 많이 사용한다.
Interface는 메서드만 갖고 있고, 구현부는 따로 있다.
Persistence.createEntityManagerFactory("jpa")
는 EntityManager를 만들어주는 메서드이다.
persistence.xml에서 <persistence-unit name="jpa">
으로 지정했기 때문에 "jpa"를 사용한 것이다.
영속성(Persistence)를 관리해주는 createEntityManagerFactory를 만들 때 "jpa"라고 설정하면, persistence.xml에서 <persistence-unit name="jpa">
하단에 있는 코드들을 읽어온다.
JDBC또한, Interface인데 이를 간소화한 것이 JPA 기술이다.
JPA는 Interface이며 구현체로 hibernate를 사용한다.
Q. JDBC 대신 JPA를 사용하는 이유는 무엇일까?
ORM(Object Relational Mapping) = Object와 Relation을 Mapping 해준다.
Book이라는 class를 만들면, 자동으로 Table로 만들 수 없을까? 하는 생각으로 나온 아이디어일 수도 있는 ORM의 개념이다.
ORM을 실체화 시킨 것이 JPA라는 Interface이고, 이 것을 실제 구현한 것이 hibernate이다.
간단하게 말하면, 별도의 SQL문 작성 없이 Java 코드 만으로 DB에 데이터를 저장할 수 있다.
(내부적으로는 결국 JDBC를 사용하지만, 보다 표면적인(추상화된) 코드를 통해 생산성이 증가한다)
JPA
= Interface , Hibernate
= 구현체
JPA를 사용하면 JDBC Interfaces ~ Persistence Layer 부분은 내부적으로 알아서 수행된다.
실제 JDBC 구현체는 JDBC Driver!