[TIL] 22.07.27

진이진이·2022년 7월 28일
1

TIL

목록 보기
65/74

영속성 ( Persistence )

: 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성으로 쉽게 말하면 (없어지지 않고 오랜동안) 지속됨이라 표현할 수 있다.

엔티티는 위 그림과 같이 4가지가 존재한다.

  • 비영속(new)
    영속성 컨텍스트와 전혀 관계가 없는 상태
    : 객체 생성
    Person person = new Person("person");

  • 영속(managed)
    영속성 컨텍스트에 저장된 상태
    : 객체 생성 후 EntityManager 를 통해 영속성 컨텍스트에 저장
    entityManager.persist();

  • 준영속(detached)
    영속성 컨텍스트에 저장되었다가 분리된 상태
    : 영속성 컨텍스트가 영속 상태였던 Entity 를 관리하지 않음 (3가지)

    1. entityManager.detach();
    2. entityManager.closed(); // 영속성 컨텍스트 종료
    3. entityManager.clear(); // 영속성 컨텍스트 초기화
      준영속 상태가 되면 1차 캐시부터 쓰기 지연 SQL 저장소까지 해당 엔티티를 관리하기 위한 모
      든 정보가 제거됨
  • 삭제(removed)
    삭제된 상태
    : 영속성 컨텍스트와 데이터베이스에서 Entity 삭제
    entityManager.remove();

사용하는 이유

  • 1차 캐시
    : DB에 직접 접근하지 않아도 1차 캐시라는 공간에서 Entity를 가져올 수 있음

  • 동일성 보장
    : DB에서 조회한 Data를 기반으로 새로운 Entity를 생성하는 것이 아닌 1차 캐시에서 삽입, 조회

  • 쓰기 지연
    : 쓰기 지연 SQL 저장소라는 곳에서 한번에 실행 가능

  • 변경 감지
    : flush()가 실행될 때 Entity와 스냅샷을 먼저 비교하고 다른 것을 감지해 자동으로 Update문을 생성

     flush()
     : 변경 감지를 통해 엔티티를 찾고, 수정된 엔티티는 쓰기 지연 SQL저장소에 저장
     이후 쓰기지연 저장소의 쿼리를 DB로 전달
profile
개발 어린이

0개의 댓글