영속성 컨텍스트

 

JPA에서 가장 중요한 두가지

  1. ORM
  2. 영속성 컨텍스트

 

 

엔티티 매니저 팩토리와 엔티티 매니저

emf는 em을 생성하고

em은 커넥션을 사용해서 db를 사용함

 

영속성 컨텍스트:

엔티티를 영구 저장하는 환경

 

엔티티의 생명주기:

비영속, 영속, 준영속, 삭제

 

비영속: 영속성 컨텍스트와 관계가 없음

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

준영속: 영속성 컨텍스트에 저장되어있다가 분리된 상태

삭제: 삭제된 상태

 

  • 영속상태가 된다고 해서 바로 db에 쿼리기 가는게 아님
  • 트렌젝션을 commit 할 때 감.

 

영속성 컨텍스트

내부에 1차 캐시가 있음 

  • 1차 캐시의 이점: 조회시에 db를 조회하기 전, 1차 캐시를 먼저 조회하고 값이 있을 시, 반환이 빨라짐.
  • But 한 트렌젝션 안에서만 존재할 수 있으므로, 실제로 성능 이점을 크게 얻는다고 말할 수는 없음.

 

영속 엔티티는 동일성을 보장해준다.

(==으로 비교했을 때, true가 나옴) -> 1차 캐시로 반복 가능한 읽기 등급의 트랜잭션 격리 수준을 애플리케이션 차원에서 제공

 

persist를 하면 바로 쿼리로 쏘는게 아니라, 쓰기 지연 SQL 저장소 및 1차 캐시에 저장됨.

 

그리고 SQL 저장소에 모아둔 것은 트렌젝션 커밋을 할 때 보내짐.

 

더티 채킹: 변경감지

영속 컨텍스트가 있어서 가능.

커밋을 하면 flush()가 호출

호출 된 후 엔티티와 스냅샷을 비교

 

 

+ Recent posts