<JPA> 영속성 컨텍스트
by BFineJPA를 공부하면 항상 까먹는게 영속성 컨테이너에 대한 부분이다. 그래서 좀 정리하면 좋을 것 같아서 위의
김영한님의 JPA기본강의 내용과 내가 이해한 부분들을 정리해서 잊어버릴때마다 봐야겠다.
가. 동작
a. 구성
- 요청이 들어오면 EntityManagerFactory에서 EntityManager를 생성한다.
- EntityManager는 DB에 DBCP를 활용해 접근하며 영속성 컨텍스트를 내부에 가지고 있다.
나. 영속성 컨텍스트
a. 무엇인가
- 영속성 컨테이너는 Entity를 영구적으로 저장하는 환경(공간)이다.
- 영속성 컨테이너는 최초 구동시 persistence.xml을 로딩한다.
- 그림처럼 em(EntityManager).persist(Object)를 사용하여 Entity를 영속화 할수 있다.
b. 1차 캐시
- Entity는 영속화되어 1차캐시에 저장되며 Commit or Flush 할경우에 DB에 SQL로 입력된다.
- 하나의 트랙잭션에만 캐시하기 때문에 일반적인 캐시 역할을 하긴 어렵다.
다. 특성
a. 4가지 상태
- New(비영속), Managed(영속), Detached(분리), Remove(제거)
- Detached 상태는 한번 Manage 상태였다가 분리된 상태이다.
b. 변경감지(더티 체크)
- 영속화된 Entity의 상태가 변화하면 실제데이터도 변경해주는것을 의미한다.
- 영속성 컨테이너는 Entity의 스냅샷을 가지고 있기 때문에 Entity가 변경되면 1차캐시에서
스냅샷과 비교를 통해 변경(Update)를 영속성 컨테이너 내부에 저장한다.
- 그러므로 영속화된 Entity의 동일성을 보장한다. equal하다
c. Flush
- 영속성 컨테이너에 저장된 내용(Insert, Update)을 DB에 반영하는 부분이다.
- Commit 하지않고 Update, Insert, delete 등 쿼리만 날려둔 것이다.
- 주의할점은 영속화된 Entity가 지워지는 것은 아니다.
'공부 > JPA' 카테고리의 다른 글
<JPA> @OneToMany 단방향으로 쓰지 않는 이유 (1) | 2024.04.09 |
---|---|
<JPA> 낙관적락(Optimistic Lock), 비관적락(Pessimistic Lock) (0) | 2022.03.05 |
<Spring & JPA 웹서비스 만들기 > 구현 (5) - 달력 만들기 (0) | 2021.02.12 |
<Spring & JPA 웹서비스 만들기 > 구현 (4) - 화면 구성 (0) | 2021.02.06 |
<Spring & JPA 웹서비스 만들기 > 구현 (3) - Redis 자동완성 (0) | 2021.01.31 |
블로그의 정보
57개월 BackEnd
BFine