EntityManager, EntityManager Factory

영속성 컨텍스트 (엔티티를 영구 저장하는 환경)

 

EntityManager.persist() 는 새로운 오브젝트를 데이터베이스에 넣는 방법이다.

여기서 persist 는 곧바로 오브젝트를 데이터베이스에 넣지 않는다. 단지 새로운 영속성 컨텍스트 (트랜젝션)에 등록한다.

 

EntityManager : PersistenceContext = 1 : 1

엔티티매니저는 내부적으로 PersistenceContext 를 생성

 

Entity 라이프사이클

비영속 (new/transient) : 객체를 생성한 상태

영속 (managed) : 영속성 컨텍스트에 의해 관리되는 상태

준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태

삭제 (removed) : 삭제된 상태

 

Detached <- detach(), clear(), close() <- Managed

Detached -> merge() -> Managed

 

new -> persist() -> Managed

 

Managed -> remove() -> Removed

Managed <- persist() <- Removed

 

Managed -> flush() -> DB

Managed <- find(), JPQL <- DB

 

Removed -> flush() -> DB