spring/JPA

영속성 컨텍스트

콤마, 2022. 8. 13. 03:32

-JPA를 이용하는데 가장 중요한 단어

-'엔티티를 영구 저장하는 환경' 이라는 뜻

-Entity Manager.persist(entity)

 

EntityManager 생성시 1:1로 context생성

 

생명주기

-비영속 : 영속성 컨텍스트와는 관련없는 새로운 상태

-영속 : 영속성 컨텍스트에 관리되는 상태

-준영속 : 영속성 컨텍스트에 관리되다 분리된 상태

-삭제 : 영속성 컨텍스트에서 삭제된 상태

 

SQL쿼리는 commit시 날라가고 persist한다고 날라가진 않음.

 

이점

-1차캐시

entity를 불러올 때 영속성 컨텍스트 내부의 1차캐시에 저장해서

처음 이후 사용시 SQL을 날려서 불러오지 않고 빠르게 불러온다.

-동일성 보장

쉽게 말해 같은 Entity라고 해도 ==비교시엔 false가 뜨지만

영속성 컨텍스트 내부에선 ==비교를 해도 같다고 표기해줌.

-쓰기지연

persist시 바로 DB에 쿼리를 날리는게 아니라

영속성 컨텍스트 내부의 '쓰기 지연 SQL저장소' 라는 곳에 저장이 됨.

뭔가 이점이 있는 듯

-변경감지

만약 데이터가 변경 시 JPA에서 스냅샷의 변경된 부분을 일일이 감지해내서

감지된 부분이 있으면 위에 말한 '쓰기 지연 SQL 저장소'에 update문으로 SQL 작성해줌

-지연 로딩

아직 모르겠음.