JPA - Persistence Context

김태완·2022년 4월 4일
0

개념정리

목록 보기
1/2

Persistence Context

정의 : 인스턴스로 존재하는 엔티티를 관리하고 영속화시키는 논리적 영역

특징

  • 엔티티를 관리하고 필요에 따라 DB의 데이터를 저장, 조회, 수정, 삭제(EntityManager)
  • 크게 1차 캐시 저장소와 쿼리문 저장소로 나뉨
  • 비영속, 영속, 준영속, 삭제 상태가 있음

1차 캐시 저장소

역할 : persistence context가 관리하는 엔티티 정보를 보관

특징

  • 엔티티에 대한 스냅샷을 같이 저장하여 엔티티의 변경을 감지

쿼리문 저장소

역할 : 수행할 쿼리문을 저장

특징

  • 여러 쿼리를 모아두어 DB에 대한 접근을 줄이기 때문에 성능상에 이점이 생김
  • EntityManager의 flush()를 이용해 쿼리문을 DB에 적용

비영속 상태

  • persistence context와 관련없는 상태의 엔티티

영속 상태

  • persistence context에서 관리되는 상태의 엔티티
  • DB에 저장될 가능성이 있는 상태의 엔티티
  • persist()를 이용해 비영속 상태의 엔티티가 영속 상태로 변함
  • inset 쿼리문이 쿼리문 저장소에 저장
  • flush() 시에 DB에 엔티티가 반영(엔티티는 남아있고, 쿼리문만 사라짐)
  • find()로 DB에서 엔티티를 찾아오면 영속 상태로 1차 캐시 저장소에 보관
  • 이미 1차 캐시 저장소에 보관하는 엔티티를 찾으면 DB에 접근하지 않음

준영속 상태

  • persistence context에서 관리되었지만 현재는 관리되지 않는 상태의 엔티티
  • merge()를 이용해 준영속 상태의 엔티티를 영속 상태로 변경
  • detach()를 이용해 영속 상태의 엔티티를 준영속 상태로 변경
  • clear()를 이용해 persistence context 전체를 초기화
  • close()를 이용해 persistence context를 닫음

삭제 상태

  • persistence context에서 관리되지 않으며 DB에서 제거된 상태의 엔티티
  • 1차 캐시 저장소에서 엔티티가 제거되고, 쿼리문 저장소에 delete 쿼리문이 저장
  • flush() 전까지는 DB에 반영 안됨

참고자료

0개의 댓글