(3) 엔티티의 생명주기
Last update: a year ago by nowwaterReading time: 2 min
엔티티의 4가지 상태
비영속(new/transient) | 영속성 컨텍스트와 전혀 관계가 없는 상태 |
---|---|
영속(managed) | 영속성 컨텍스트에 저장된 상태 |
준영속(detached) | 영속성 컨텍스트에 저장되었다가 분리된 상태 |
삭제(removed) | 삭제된 상태 |
생명 주기
비영속
- 엔티티 객체를 생성하면 순수한 객체 상태이며 아직 저장되지 않은 상태이다.
- 영속성 컨텍스트나 데이터베이스와 상관이 없다.
// 객체를 생성한 상태(비영속)Member member = new Member();member.setId(100L);member.setUsername("회원1");
em.persist() 호출 전, 비영속 상태
영속
- 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태
- 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 한다.
- 회원 엔티티 : 비영속 상태 => 영속 상태
em.find()
나JPQL
을 사용해서 조회한 엔티티도 영속 상태이다
// 객체를 저장한 상태(영속)em.persist(member);
em.persist() 호출 후, 영속상태
준영속
- 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태
em.detach()
를 호출하여 특정 엔티티를 준영속 상태로 만들 수 있다.
em.close()
로 영속성 컨텍스트를 닫거나,em.clear()
를 호출해서 영속성 컨텍스트를 초기화해도 영속성 컨텍스트가 관리하던 영속 상태의 엔티티는 준영속 상태가 된다.
// 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태em.detach(member);
삭제
엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제
// 객체를 삭제한 상태(삭제)em.remove(member);