JaeniWorld
[JPA] 영속성 컨텍스트(Persistence Context) 본문
반응형
영속성 컨텍스트(Persistence Context)
Persistence Context는 엔티티를 영구저장하는 환경, Entity Manger로 엔티티를 저장하면 엔티티매니저는 엔티티를 영속성 컨텍스트에 보관하고 관리함.
- Entity의 @id 어노테이션을 이용하여 엔티티를 식별함
- 쓰기 지연 기능이 존재하여 값을 변경하자마자 DB에 반영되지 않고 EntityManager가 Commit()을 호출할 때 DB반영 == Flush
- 1차캐시, 동일성 보장, 변경 감지, 지연 로딩의 특징을 가짐
스프링에서 EntityManager를 주입 받아서 쓰면, 같은 트랜잭션 범위에 있는 EntityManager는 동일 영속성 컨텍스트에 접근함.
Entity LifeCycle
- 비영속 (new)
persistence context와 관련이 없는 상태로 쉽게 말해 DB와 연관없는 순수한 객체상태 - 영속 (Managed)
Persistence Context에 저장된 상태로 Entity가 Persistence Context에 의해 관리됨
EntityManager.persist(entity);하는 순간 엔티티를 영속한다. - 준영속(detached)
영속성 컨텍스트에 저장되었다 분리된 상태 그리고 영속성 컨텍스트에서 지운 상태 - 삭제(removed)
컨텍스트와 DB 모두 삭제
// 비영속 상태
Member member = new Member();
EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();
//영속상태 (Persitencecontext가 member를 관리함)
em.persist(member);
//준영속(detach)
em.detach(member);
//객체 삭제
em.remove(member);
transaction.commit(); // 해당 문장을 쓰지 않으면 쿼리가 DB로 날아가지 않음.
참조
반응형
'프로그래밍 > JPA' 카테고리의 다른 글
[JPA] Persistence context 의 특징 (0) | 2021.03.09 |
---|
Comments