공적's life

JPA - Persistence Context 본문

Programing

JPA - Persistence Context

melpis 2019. 4. 4. 09:39

JPA - Persistence Context

org.hibernate.Session API와 javax.persistence.EntityManager API 둘다 persistent data 즉 우리말로 번역하면 매우 어색한 영속성 데이터를 처리하기 위해서 존재한다. 이런 개념을 Persistence Context라고 한다.

해당 Context는 아래와 같은 4가지 상태를 갖는다.

transient

비영속 이라고 번역 된다.

방금 인스턴스화되어서 Persistence Context와는 관계가 없고 식별자 또한 없다.

managed, or persistent

영속 이라고 번역 된다.

엔티티가 Persistence Context에 저장되고 관리도고 있는 상태이고 식별자도 존재함. 하지만 데이터베이스 물리적으로 존재하지 않을 수도 있음

관리중 일때 장점

  1. 1차 캐쉬 : Persistence Context 저장된 엔티티를 호출할때 데이터 베이스 쿼리 없이 호출됨
  2. 동일성 보장 : Persistence Context 저장된 엔티티를 호출할때 동일한 엔티티 즉 동일한 객체가 리턴됨
  3. 변경감지(Dirty Checking) : Persistence Context 저장된 엔티티를 값을 변경하면 데이터베이스에 반영함
  4. 쓰기 지연(Write Behind) : Persistence Context 저장된 엔티티를 값을 여러변 변경 하여도 최종적으로 변경된 내용만 데이터 베이스에 반영함

detached

준영속 이라고 번역 된다.

엔티티는 식별자를 가지고 있지만 Persistence Context에 의해 관리되지 않음

removed

삭제 라고 번역된다.

엔티티는 식별자를 가지며 Persistence Context관리 되고, 데이터베이스에서 제거되도록 스케줄됨