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