지우쓰 개발일기
[JPA] Persistence Context 본문
본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.
Persistence Context
어플리케이션과 DB 사이에서 객체(엔티티)를 저장하는 가상의 DB와 같은 환경
-
식별자 값(@Id)에 따라 식별된다.
-
1차 캐시, 동일성 보장, 변경 감지, 트랜잭션을 지원하는 쓰기 지연, 지연 로딩의 장점
엔티티의 생명주기
-
비영속(New/Transient): Persistence Context와 전혀 관계가 없는 상태
-
영속(Managed)
-
Persistence Context에 저장된 상태
-
Persistence Context에 의해 관리된다는 뜻
-
-
준영속(Detached)
-
Persistence Context에 저장되었다가 분리된 상태
- em.detach(), em.close(), em.clear()
- 개발자가 직접 준영속 상태로 만드는 드물고, 보통 Persistence Context가 종료될 때 준영속 상태가 된다
-
-
삭제(Removed)
-
Persistence Context와 DB에서 삭제된 상태
- 삭제된 엔티티는 Garbage Collector가 처리
-
Merge
비영속, 준영속 엔티티를 영속 상태로 만드는 것
-
Persistence Context에서 @Id 값으로 엔티티 검색 → 없으면 DB에서도 검색
-
엔티티 있으면(준영속) 불러서 병합
-
엔티티 없으면(비영속) 새로 생성해서 병합
Flush
Persistence Context의 변경 내용을 DB에 동기화하는 것
-
작업 방식
-
변경 감지 작동해서 모든 엔티티를 스냅샷과 비교
-
변경된 엔티티에 대해 수정 쿼리 작성하고 지연 SQL 저장소에 등록
-
쓰기 지연 SQL 저장소의 쿼리를 DB에 전송
-
-
호출 방법
-
em.flush(): 거의 사용하지 않음
-
tx.commit()
-
JPQL 쿼리 실행
-
'Spring Boot > JPA' 카테고리의 다른 글
[JPA] 연관관계 Mapping (2) (0) | 2020.09.12 |
---|---|
[JPA] 연관관계 Mapping (1) (0) | 2020.09.10 |
[JPA] JPQL 개요 (0) | 2020.09.09 |
[JPA] CRUD 기본 (0) | 2020.09.09 |
[JPA] persistence.xml 기본 설정 (0) | 2020.09.08 |
Comments