Entity LifeCycle
Entity Lifecycle이란 ?
Entity 객체가 생성되어 영속성 컨텍스트(Persistence Context)에서 관리되는 과정
- Entity가 어떤 상태에 있는 지를 나타내며 상태 변화에 따라 Entity와 DB 간의 동기화 작업이 수행됨
- Entity 생명주기는 Transient(비영속), Managed(영속), Detached(준영속), Removed(삭제) 4개의 상태로 이루어있음
Entity Lifecycle 상태 종류
Transient(비영속)
- Entity 객체가 생성되었지만 영속성 컨텍스트와 관련이 없는 상태
- 단순 객체 생성 상태로 JPA가 모르는 상태
Example example = new Example();
Managed(영속)
- Entity 객체가 영속성 컨텍스트에 저장되어 관리되고 있는 상태
- Entity Manager를 사용하여 영속성 컨텍스트에 등록
- 현재 상태에서는 Entity는 영속성 컨텍스트가 제공하는 Dirty Checking, 변경 추적, DB와 동기화 작업이 가능
- Transaction Commit시에 DB와 동기화 작업을 수행
//Entity 영속화
em.persist(example);
//준영속 상태의 Enity를 다시 영속화
em.merge(example);
Detached(준영속)
- 영속성 컨텍스트에 의해 관리되던 Entity가 영속성 컨텍스트에서 분리된 상태
- Entity는 영속성 컨텍스트가 제공하는 Dirty Checking, 변경 추적, DB와 동기화 작업이 불가능
- 영속성 컨텍스트와 관계가 없는 상태
//영속화된 Entity 분리
em.detach(example);
//영속성 컨텍스트 닫기 및 초기화
em.close();
em.clear();
Removed(삭제)
- 영속성 컨텍스트에 의해 관리되던 Entity가 DB에서 삭제된 예정인 상태
- Transaction Commit시 Entity가 DB에서 삭제
//영속성 컨텍스트 및 DB에서 삭제
em.remove(example);