엔티티 매니저(Entity Manager)
- 지난 글에서 공부한 영속성 컨텍스트는 눈에 보이지 않는 논리적인 개념이다. 실제는 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있다.
- 엔티티 매니저는 엔티티 객체를 저장, 수정, 삭제하고 조회하는 등 엔티티의 생명주기를 관리하는데 중요한 역할을 한다.
엔티티 생명주기
비영속(new / transient) 상태
- 엔티티 객체가 생성되었지만, 아직 JPA에 의해 관리되고 있지 않은 상태
- DB에 저장되지 않았으며, 영속성 컨텍스트에 속하지 않는다.
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
영속(managed) 상태
- 엔티티 매니저를 통해 엔티티가 영속성 컨텍스트에 저장되어 있는 상태
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(member);
준영속(detached) 상태
- 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되어 있는 상태
- 트랜잭션이 종료되거나
detach()
를 호출하면 엔티티는 준영속 상태가 된다.
em.detach(member);
삭제(removed) 상태
- 엔티티 매니저를 통해 엔티티가 삭제되어 데이터베이스에서 삭제되는 상태
em.remove(member);
생명주기 관리
- 영속성 컨텍스트는 엔티티의 영속 상태를 추적하고 엔티티의 상태 변화를 감지한다.
persist()
, merge()
, remove()
등의 메서드를 통해 엔티티를 영속성 컨텍스트에 추가, 갱신, 삭제할 수 있다.
- 엔티티 매니저가 트랜잭션을 시작하면, 영속성 컨텍스트가 활성화 되고 트랜잭션이 종료될 때 영속성 컨텍스트는 플러시(flush)되어 데이터베이스에 변경 사항을 반영한다.
- 트랜잭션이 롤백되면 영속성 컨텍스트의 상태로 롤백되어 원래 상태로 되돌아간다.
Rerference
[도서] 자바 ORM 표준 JPA 프로그래밍