[JPA] Persistence Context

Jiwoo Kim·2020년 11월 17일
0

JPA 마스터하기

목록 보기
5/14
post-thumbnail

Persistence Context

어플리케이션과 DB 사이에서 객체(엔티티)를 저장하는 가상의 DB와 같은 환경

  • 식별자 값(@Id)에 따라 식별된다.
  • 1차 캐시, 동일성 보장, 변경 감지, 트랜잭션을 지원하는 쓰기 지연, 지연 로딩의 장점

엔티티의 생명주기

비영속(New/Transient)

  • Persistence Context와 전혀 관계가 없는 상태

영속(Managed)

  • Persistence Context에 저장된 상태
  • Persistence Context에 의해 관리된다는 뜻

준영속(Detached)

  • Persistence Context에 저장되었다가 분리된 상태
  • em.detach(), em.close(), em.clear()
  • 개발자가 직접 준영속 상태로 만드는 드물다
  • 보통 Persistence Context가 종료될 때 준영속 상태가 된다

삭제(Removed)

  • Persistence Context와 DB에서 삭제된 상태
  • 삭제된 엔티티는 Garbage Collector가 처리Merge

기능

Merge

비영속, 준영속 엔티티를 영속 상태로 만드는 것

  • Persistence Context에서 @Id 값으로 엔티티 검색 → 없으면 DB에서도 검색
  • 엔티티 있으면(준영속) 불러서 병합
  • 엔티티 없으면(비영속) 새로 생성해서 병합

Flush

Persistence Context의 변경 내용을 DB에 동기화하는 것

  • 작업 방식
    • 변경 감지 작동해서 모든 엔티티를 스냅샷과 비교
    • 변경된 엔티티에 대해 수정 쿼리 작성하고 지연 SQL 저장소에 등록
    • 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송
  • 호출 방법
    • em.flush(): 거의 사용하지 않음
    • tx.commit()

본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다. (2020.09.09)

0개의 댓글