JPA

영속성 컨텍스트와 엔티티의 생명 주기

taey 2024. 8. 24. 16:55

영속성 컨텍스트란?
:  엔티티를 영구 저장하는 환경

 

영속성 컨텍스트의 이점

  • 1차 캐시
    • 영속성 컨텍스트에 존재한다면 조회 시 SQL을 날리지 않는다.
  • 동일성 보장
    • JPA가 영속 엔티티의 동일성을 보장해준다. 
      가능한 이유는 1차 캐시에서 조회해오기 때문에, 동일한 지 확인 가능하다.
      동일한 영속성 컨텍스트 내에서 같은 엔티티 키를 가진 두 객체는 같은 자바 객체이다.
  • 트랜잭션을 지원하는 쓰기 지연
    • 커밋하기 전까지는 데이터베이스에 Insert SQL을 보내지 않는다.
  • 변경 감지 
  • 지연 로딩

 

영속성 컨텍스트 flush

flush : 영속성 컨텍스트의 변경 내용을 데이터 베이스에 반영

  • em.flush() - 직접 호출
  • 트랜잭션 커밋 - 플러시 자동 호출
  • JPQL 쿼리 실행 - 플러시 자동 호출

 

플러시 모드 옵션

FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시 (기본값)

FlushModeType.COMMIT : 커밋할 때만 플러시

 

 

엔티티의 생명 주기

  • 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
// 객체를 생성만 한 상태
Member member = new Member();
member.setId(100L);
member.setName("HelloJpa");
  • 영속 (managed) : 영속성 컨텍스트에 관리되는 상태
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

//객체를 저장한 상태(영속)
em.persist(member);
  • 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태

//특정 엔티티만 준영속 상태로 전환
em.detach(member);

//영속성 컨텍스트를 완전히 초기화
em.clear()

//영속성 컨텍스트를 종료
em.close()
  • 삭제 (removed) : 삭제된 상태
//객체를 삭제한 상태(삭제)
em.remove(member);

 

'JPA' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2024.08.26
연관관계 매핑 기초  (2) 2024.08.26
기본키 매핑  (0) 2024.08.25
필드와 컬럼 매핑  (0) 2024.08.25
엔티티 매핑  (1) 2024.08.25