JPA(영속성 컨텍스트)

오민석·2021년 5월 19일
0

영속성 컨텍스트(persistence context)

어플리케이션과 db사이에서 객체를 보관하는 가상의 db. entity manager 생성할 때 하나 만들어지고, 이를 통해서 저장(persist), 조회(find)하면 영속성 컨텍스트에 저장(보관 및 관리)

생명주기

  1. 비영속 ( new )
    persistence context와 관련이 없는 상태, 즉 DB와 관련이 없는 순수한 객체 상태
    User라는 엔티티가 정의 되어 있을 때 new 키워드를 통해 객체를 생성한 상태
    ex) Member member = new Member();
  1. 영속 ( managed )
    엔티티 매니저가 관리하는 persistence context에 엔티티가 저장된 상태
    persist() 메서드를 호출하거나, find() 또는 JPQL과 QueryDSL로 엔티티를 조회 했을 때 그 엔티티를 영속상태라 합니다.
    ex) em.persist(member) 또는 em.find(member.class, 1)
  1. 준영속 (detached )
    persistence context에 저장되었다가 분리된 상태, 즉 엔티티 매니저가 관리하지 않는 상태
    영속 상태에서 준영속 상태로 바꾸는 방법은 아래와 같이 3가지가 있습니다.
    ex)
    em.detach(userA) : 특정 엔티티만 분리
    em.clear() : persistence context를 초기화
    em.close() : persistence context를 종료
  1. 삭제 ( removed )
    persistence context에서 엔티티를 제거하며, DB에서도 해당 객체를 삭제
    remove() 메서드를 호출하여 엔티티를 삭제할 수 있습니다.
    ex) em.remove(member)

장점

  • 1차 캐시
  • 동일성 보장
  • 트랜잭션을 지원하는 쓰기 지연
  • 변경 감지
  • 지연 로딩

Reference: https://victorydntmd.tistory.com/207

0개의 댓글