Hibernate에 대하여

60jong·2023년 3월 5일
0

JPA

목록 보기
5/5
post-thumbnail

Hibernate

Architecture


하이버네이트는 jpa의 구현체이다. JPA provider
RDB와 data access layer 사이에 위치한다.
java 어플리케이션에서 하이버네이트의 api를 통해 query를 조작할 수 있다.

SessionFactory

EntityManagerFactory <- SessionFactory <- SessionFactoryImpl
jpa <- hibernate <- hibernate

  • org.hibernate.Session 인스턴스들을 만드는 팩토리이다!
  • expensive to create -> 어플리케이션 should have only one associated SessionFactory.
  • SF는 all Session(s) such as second level caches, connection pools, transaction system integrations, etc.

Session

EntityManager <- Session <- SessionImpl

  • single threaded, short-lived object
  • unit of work이며, JDBC connection을 감싸고, org.hibernate.Transaction instances의 공장 역할
  • maintain 영속성 컨텍스트 (1차 캐시)

Transaction

  • single-threaded, short lived object, used by 어플리케이션
  • 어플리케이션을 underlying transaction system으로부터 분리시킴(db 작동에 무관하게 됨.)

Domain Model

Domain Model이란, 우리가 문제를 해결해야 하는 영역을 표현하는 model이다.
domain model은 ORM의 가장 중요한 특징으로, map하기 원하는 class들을 구성한다.
그러한 class들이 POJO를 따를 때 가장 잘 작동한다.

Mapping Types

하이버네이트는 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이 있다.

  • Value type
    스스로의 lifecycle을 갖지 않은채, entity type에 종속된 piece of data
  • Entity type
    Entity type은 자기 스스로의 생명 주기를 갖고, a unique identifier를 통해 독립적으로 존재하는 타입이다.
    entity type

Basic type을 선언하는 어노테이션은 jakarta.persistence.Basic인데 생략이 가능하다. 이 어노테이션을 사용한다면 두 가지 option이 존재한다

  • optional
  • fetch

Persistence Context

Reference

profile
울릉도에 별장 짓고 싶다

0개의 댓글