-
Notifications
You must be signed in to change notification settings - Fork 1
영속성 컨텍스트
kimtaehun edited this page Dec 27, 2022
·
10 revisions
생명주기
org.hibernate.Session
, javax.persistence.EntityManager
이렇게 2가지가 영속성 컨텍스트 구현체(?)라고 합니다.
persistence data는 상태를 갖고 있는데요.
persistence context와 database와 관계된 상태라고 합니다.
상태값은 총 4가지가 있습니다.
new, transient: 엔티티가 인스턴스화 되었지만, 영속 컨텍스트와는 무관한 상태, 디비와 관계없고, 식별자 할당되기 전 입니다.
managed, persistence: 식별자도 있고, 영속 컨텐스트와 관계되어 있음
detached: 식별자는 있지만, 영속 컨텍스트와는 무관, 영속 컨텍스트가 close되거나 인스턴스가 컨텍스트에서 evict된 상태
removed: 엔티티가 식별자도 있고, 컨텍스트와 연관되어 있지만, 디비에서 지워지기로 예약된 상태
영속화된 엔티티의 경우 flush() 되기 전까지는 쿼리를 전송하지 않습니다.
flush()가 호출되면, 스냅샷과 다른 엔티티의 쿼리만 전송합니다.(스탭샷은 최초 영속화될때 찍어둡니다.)
이때 수정 쿼리는 전체 필드를 포함합니다.
DynamicUpdate 어노테이션을 활용해야 수정된 필드만 포함된 쿼리를 전송할 수 있습니다.
- 지연로딩, 캐시, 더티체킹으로 효율적인 쿼리 전송