본문 바로가기

Spring Boot/JPA

JPA

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

요청이 올 때마다 엔티티 메니저를 생성한다.

영속성 컨텍스트
- 엔티티의 라이프 사이클을 관리하는 곳이다. 1차 캐시라고 생각하면 된다.

EntityManager안에 PersistenceContext가 1:1매핑된다.

비영속 상태 - 생성만한 상태
영속 상태 - 관리되는 상태
준영속 - 관리가 안되도록 분리한 상태
삭제 - 객체를 삭제한 상태

1차 캐시는 찰나의 순간에서만 이득이 있다.
비지니스 로직이 복잡한 경우에는 이점이 있겠지만

전체에서 공유를 하는 것은 2차 캐시이다.

쓰기지연 SQL 저장소
ActionQueue에 변경 사항이 일어났을 때, 수행해야될 SQL들을 쌓아둔다.
insert의 경우에는 EntityInsertAction, update의 경우에는 EntityUpdateAction 이 추가 된다.

flush 하는 방법

1.em.flush()
2. tx.commit();
3. JPQL 쿼리 실행전
JPQL은 1차캐시에서 찾지 않고 바로 DB에서 찾아서 가지고 오기 때문에, 문제가 생길 수 있어서 flush를 한후에 JPQL을 실행시킨다. 

쓰기 지연 SQL 저장소에 있는 쿼리들이 반영이 되는것이라, persistence context가 초기화 되는 것은 아니다.

반응형