데브코스/TIL

엔티티 매니저와 엔티티 상태

민발자 2025. 1. 27. 21:42
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