영속성 컨텍스트(Persistence Context)

- 논리적인 개념으로서,
Entity Manager를 생성할 때 만들어진다.
Entity를 영구히 저장하는 환경을 말한다.
Entity Manager를 통해서만 접근이 가능하다.
Entity Manager는 영속성 컨텍스트에 Entity를 관리한다.
em.persist()는 DB에 Entity를 저장하는 것이 아니라
영속성 컨텍스트에 저장(영속화) 시키는 것이다.
엔티티 생명주기(Entity Life-cycle)

1. 비영속(new/transient)
- 영속성 컨텍스트와 관련이 없는 상태
Entity 객체가 만들어진 직후의 상태
2. 영속(managed)
Entity Manager를 통해서 Entity를 영속성 컨텍스트에 저장한 상태
- 영속성 컨텍스트에 의해서 관리되는 상태이다.
persist()처럼 새로 Entity 객체를 저장하는 경우
JPQL or em.find() 처럼 조회하여 DB에서 가져오는 경우
3. 준영속(detached) :
- 영속 상태에서 관리하지 않으면 준영속 상태가 된다.
em.detach()는 특정 Entity를 준영속 상태로 만든다.
em.close()는 영속 컨텍스트를 닫고, Entity들을 준영속 상태로 만듦
em.clear()는 영속 컨텍스트를 초기화한다. Entity들을 준영속 상태로 만듦
4. 삭제(removed) :
- 엔티티 객체를 영속성 컨텍스트와 DB에서 삭제한다.