JPA - 영속성 관리

Ahn yi·2022년 10월 15일

jpa

목록 보기
1/7

영속성 컨텍스트란?

  • 엔티티를 영구 저장하는 환경

엔티티의 생명주기

  • 비영속
    • 영속성 컨텍스트와 전혀 관계 없는 상태
  • 영속
    • 영속성 컨텍스트에 관리되는 상태
  • 준영속
    • 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제
    • 삭제된 상태

영속성 컨텍스트의 특징

  • 1차 캐시
    • 데이터베이스에서 조회 시, 1차 캐시가 비어있을 경우에 데이터베이스에서 조회하고 1차 캐시에 데이터가 있는 경우 1차 캐시에서 바로 데이터를 조회할 수 있다.
    • 성능적인 이점보다는 객체적인 이점이 존재한다.
  • 동일성 보장
    • 영속 엔티티는 '==' 비교를 보장해준다.
  • 쓰기 지연 기능 지원
    • 쓰기 지연 SQL 저장소가 존재한다.
    • 데이터 Insert시, 저장소에 저장을 하고 트랜잭션 커밋 시점에 flush가 되면서 적용된다.
    • hibernate.jdbc.batch_size로 갯수 조절이 가능하다.
    • 추후 성능에 대한 이점이 된다.
  • 변경 감지 (더티 체킹)
    • flush -> 엔티티와 스냅샷 비교 -> UPDATE SQL 생성 -> flush -> commit
    • 스냅샷이란?
      • 최초 데이터를 가져온 시점
    • 엔티티와 스냅샷 비교시에 데이터 변경이 있을 경우 UPDATE
    • UPDATE SQL이 없어도 데이터 변경이 있으면 자동으로 UPDATE 처리

플러시

  • 영속성 컨텍스트의 변경내용을 데이터베이스에 반영
    • 변경 감지
    • 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
    • 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
    • 트랜잭션 커밋 시에 자동으로 호출된다.
    • 1차 캐시 변경 없이 쓰기 지연 SQL 저장소를 다룬다.
      • 영속성 컨텍스트를 비우지 않는다.

영속성 컨텍스트의 변경내용을 데이터베이스에 동기화

  • 플러시 모드 옵션
    • FlushModeType.AUTO : 커밋이나 쿼리 실행할 때 플러시 (default)
    • FlushModeType.COMMIT : 커밋할 때만 플러시

준영속 상태

  • 데이터 조회시 영속 상태가 된다.
  • 준영속 상태?
    • 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되는 것
    • 영속성 컨텍스트가 제공하는 기능을 사용 못함
    • 준영속 상태 방법
      • detach, clear, close
profile
소통을 잘하고싶은 백엔드 개발자

0개의 댓글