하이버네이트는 jpa의 구현체이다. JPA provider
RDB와 data access layer 사이에 위치한다.
java 어플리케이션에서 하이버네이트의 api를 통해 query를 조작할 수 있다.
EntityManagerFactory <- SessionFactory <- SessionFactoryImpl
jpa <- hibernate <- hibernate
EntityManager <- Session <- SessionImpl
Domain Model이란, 우리가 문제를 해결해야 하는 영역을 표현하는 model이다.
domain model은 ORM의 가장 중요한 특징으로, map하기 원하는 class들을 구성한다.
그러한 class들이 POJO를 따를 때 가장 잘 작동한다.
하이버네이트는 java와 jdbc를 모두 이해할 수 있는데, Hinernate의 type을 통해 db로부터 데이터를 read/write한다. 여기서 hibernate의 type은 org.hibernate.type.Type interface로서, java code이다. Hinernate의 type은 java type와 sql type을 매핑함으로써 rdb로부터 data를 읽어올 수 있게 된다.
두 가지 type이 있다.
Basic type을 선언하는 어노테이션은 jakarta.persistence.Basic
인데 생략이 가능하다. 이 어노테이션을 사용한다면 두 가지 option이 존재한다
optional
fetch