Skip to content

영속성 컨텍스트

kimtaehun edited this page Dec 27, 2022 · 10 revisions
Screenshot 2022-12-27 at 10 20 18 AM

생명주기

[구현체는 무엇인가요?]

org.hibernate.Session, javax.persistence.EntityManager 이렇게 2가지가 영속성 컨텍스트 구현체(?)라고 합니다.

persistence data는 상태를 갖고 있는데요.

persistence context와 database와 관계된 상태라고 합니다.

[영속 데이터의 상태는 어떤게 있나요?]

상태값은 총 4가지가 있습니다.

new, transient: 엔티티가 인스턴스화 되었지만, 영속 컨텍스트와는 무관한 상태, 디비와 관계없고, 식별자 할당되기 전 입니다.

managed, persistence: 식별자도 있고, 영속 컨텐스트와 관계되어 있음

detached: 식별자는 있지만, 영속 컨텍스트와는 무관, 영속 컨텍스트가 close되거나 인스턴스가 컨텍스트에서 evict된 상태

removed: 엔티티가 식별자도 있고, 컨텍스트와 연관되어 있지만, 디비에서 지워지기로 예약된 상태

[변경감지, dirty checking이란?]

영속화된 엔티티의 경우 flush() 되기 전까지는 쿼리를 전송하지 않습니다.

flush()가 호출되면, 스냅샷과 다른 엔티티의 쿼리만 전송합니다.(스탭샷은 최초 영속화될때 찍어둡니다.)

이때 수정 쿼리는 전체 필드를 포함합니다.

DynamicUpdate 어노테이션을 활용해야 수정된 필드만 포함된 쿼리를 전송할 수 있습니다.

[영속컨텍스트 장점은?]

  • 지연로딩, 캐시, 더티체킹으로 효율적인 쿼리 전송

참고문헌

hibernate persistence context

Clone this wiki locally