영속성 컨텍스트 (Persistence Context)

iy·2024년 1월 21일

Java-JPA

목록 보기
2/12

영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경
    - 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저느 영속성 컨텍스트에 엔티티를 보관하고 관리함
em.persist(member);
// persist() 메소드는 매니저를 사용해 회원 엔티티를 영속성 컨텍스트에 저장함

엔티티 생명주기

  1. 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 상태
  • 엔티티 객체를 생성만 한 순수한 객체 상태이며 아직 저장하지 않아 영속성 컨텍스트나 데이터베이스와 아무련 관련 없음
  1. 영속 : 영속성 컨텍스트에 저장된 상태
  • 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장
  • 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 함
    - 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻
  1. 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 됨
//1. 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);
//2. 영속성 컨텍스트 닫기
em.close();
//3. 영속성 컨텍스트 호출 후 초기화
em.clear():
  1. 삭제 : 삭제된 상태
  • 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제함

영속성 컨텍스트의 특징

  • 영속성 컨텍스트와 식별자 값
    - 영속성 컨텍스트는 엔티티를 식별자 값(@Id로 테이블의 기본 키와 매핑한 값)으로 구분하기 때문에 영속 상태는 반드시 식별자 값이 있어야 함 -> 없으면 예외 발생
  • 영속성 컨텍스트와 데이터베이스 저장
    - JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데 이것을 플러시라고 함
  • 영속성 컨텍스트가 엔티티를 관리할 때 장점
    - 1차 캐시
    - 동일성 보장
    - 트랜잭션을 지원하는 쓰기 지연
    - 변경 감지
    - 지연 로딩

📘 참고 도서 : 자바 ORM 표준 JPA 프로그래밍(저자 : 김영한)

0개의 댓글