개발공부/[Spring]김영한_ORM표준 JPA프로그래밍

영속성 컨텍스트, 엔티티의 생명주기

개발자 덕구🐾 2022. 8. 23. 19:00
728x90

영속성 컨텍스트 

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

 

 

- J2SE 환경 기준 -

 

EntityManager.persist(entity);

DB에 저장한다는 의미가 아니라 entity를 영속성 컨텍스트에 저장한다는 의미 

엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다. 

 

 

 

EntityManager영속성 컨텍스트가 1:1 관계이다. 

 

 

 

 


 

엔티티의 생명주기 

1. 비영속 상태

> 멤버 객체를 생성만한 상태 

 

2. 영속 상태

>  객체 생성후 엔티티 매니저를 통해 persist해서 객체를 영속 컨텍스트에 넣는다. 

 

3. 준영속 상태

>  detach , 영속 상태의 엔티티가 영속성 컨텍스트에서 분리 

 

4. 삭제 상태 

> DB에서 객체를 삭제 

 

 

 


 

 

 

영속성 컨텍스트의 이점 !! 

1. 1차 캐시 

 

key : pk

value : entity 자체 

 

동일한 트랜잭션 안에서 조회를 할 때 

 

먼저 1차 캐시에서 찾고 그 후에 DB를 조회하여 찾는다. 

그리고 이를 1차 캐시에 저장한 후에 반환한다. 

만약 다시 해당 객체를 찾으면 쿼리를 다시 안날려도 된다. 

 

1차 캐시를 영속성 컨텍스트라고 보면된다. 

 

 

2. 영속 엔티티의 동일성 보장 

 

 

3. 트랜잭션을 지원하는 쓰기 지연 

persist가 발생하면 1차 캐시에 저장하는 동시에 쓰기 지연 SQL 저장소에 insert SQL을 생성한다 .

모았다가 한번에 실행 가능 

 

 

4. 변경 감지 

 

JPA의 목적은 자바의  컬렉션을 다루는 것처럼 객체를 다루는 것이다. 

변경을 했다면 update로 저장하지않아도 update문이 실행된다. 

 

 

commit하면 flush가 발생한다. 

그 후 엔티티와 스냅샷(최초의 상태)을 비교한다.  

달라진 점이 있다면 update 쿼리를 쓰기지연 SQL 저장소에 넣는다. 

 

 

5. 지연 로딩 

 

 

 

 

 

 

 

 

반응형