minghxx.blog
  • 엔티티 매니저와 엔티티 상태
    2025년 01월 27일 21시 42분 51초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    • 영속성 컨텍스트
      • 엔티티를 영구 저장하는 환경
      • 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해줌
      • 효율적인 영속 로직 수행을 위해 엔티티는 영속성 컨텍스트에 관리되어야 함
    • 엔티티 매니저
      • 영속성 컨텍스트를 도와주는 것이 엔티티 매니저
      • 엔티티의 상태를 변경하고 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있음
    • 엔티티 상태
      • 영속성 컨텍스트와 관련하여 4가지 상태를 가짐
      • 비영속, 영속, 준영속, 삭제
      • 엔티티 매니저는 persist, merge, remove, close 메서드를 이용하여 엔티티의 상태를 변경할 수 있음
      • 엔티티 매니저는 영속성 컨텍스트의 1차 캐시로부터 엔티티를 조회할 수 있고 쓰기 지연 저장소에 있는 쿼리들을 flush하여 DB와 동기화 시킬 수 있음
      • JPQL, Native Query를 이용하여 직접 DB로부터 데이터를 불러올 수도 있음
    • 비영속 상태
      • 엔티티 객체가 새로 생성되었지만 아직 영속성 컨텍스트와 연관되지 않은 상태
      • 데이터베이스와 전혀 관련없으며 엔티티 객체는 메모리 상에만 존재
    Member member = new Member("산초");
    
    • 영속 상태
      • 엔티티 객체가 영속성 컨텍스트에 관리되고 있는 상태
      • 엔티티의 변경 사항이 자동으로 데이터베이스에 반영
    em.persist(member);
    em.merge(detagedMember);
    em.find(Member.class, 1L);
    
    • 준영속 상태
      • 엔티티 객체가 한 번 영속성 컨텍스에 의해 관리되었지만 현재는 영속성 컨텍스트와 분리된 상태
      • 엔티티 객체의 변경 사항이 더 이상 데이터베이스에 반영되지 않음
      • 영속성 컨텍스트 종료, 트랜잭션 종료 등으로도 준영속 상태로 전환됨
    em.detach(member);
    em.clear();
    em.close();
    
    • 삭제 상태
      • 엔티티 객체가 영속성 컨텍스트에서 제거된 상태
      • 엔티티 객체가 데이터베이스에서 삭제됨
    em.remove(member);
    
    728x90

    '데브코스 > TIL' 카테고리의 다른 글

    JPA의 ddl 옵션  (0) 2025.01.24
    스프링 부트 매개변수 이름 인식  (0) 2024.12.17
    댓글