[SPRING] JPA - 영속성 컨텍스트

RuiN·2022년 7월 28일
1

영속성 컨텍스트

JPA를 공부하면서 핵심 2가지

  • Object와 RDB 매핑
  • 영속성 컨텍스트

영속성 컨텍스트...??

엔티티를 영구 저장하는 환경 입니다.

EntityManager를 통해서 영속성 컨텍스트에 접근하게 됩니다.

EntityManagerFactory는 여러 Thread에서 동시에 접근해도 안전하지만, 생성비용이 높습니다.
따라서, EntityManagerFactor에서 Request가 올때마다 생성 비용이 거의 없는 EntityManager를 생성합니다.

EntityManager는 Thread Not Safe 로, 여러 Thread가 동시에 접근하게 되면 문제점이 발생합니다.
그래서 Thread 별로 한개씩 할당 하게 됩니다.


영속성 컨텍스트의 특징

  • 영속성 컨텍스트와 식별자 Value
    • Entity를 식별자 Value ( @Id로 테이블의 기본키와 매핑 값) 으로 구분
    • 영속 상태에서는 식별자 Value가 반드시 존재해야함
    • 만약 없으면 Exception 발생
  • 영속성 컨텍스트와 DB 저장
    • JPA에서는 보통 Transaction을 Commit 하는 순간 영속성 컨텍스트에 새로 저장된 Entity를 DB에 반영
    • flush();
  • 영속성 컨텍스트가 Entity를 Manage하는것의 장점
    • 1차 Cache
    • 동일성 보장
    • Transaction을 지원하는 쓰기 지연
    • 변경 감지
    • 지연 로딩

부록 - Entity의 생명주기 ( 다른 곳에서 다룰 예정)

  • 비영속( New / Transient ) = 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
  • 영속 ( Managed ) = 영속성 컨텍스트에 관리되는 상태
  • 준영속 ( Detached ) = 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제 ( Removed ) = 삭제된 상태
profile
어디까지 올라갈지 궁금한 하루

0개의 댓글