3.3 엔티티의 생명주기
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);