JPA Persistence Context
JPA Persistence Context
JPA Persistence Context
- JPA의 영속성 컨텍스트란 엔티티를 영구적으로 저장하는
일종의 가상 DB
- Application과 DB 사이에서 객체를 보관하는 논리적 개념
Entity Manager
- 영속성 컨텍스트의 엔티티에 접근 및 관리가 가능한 인터페이스
- Spring Bean으로 등록되어
@Autowired
사용 가능 - 메서드 예시
em.persist(entity)
를 통해 엔티티를 영속성 컨텍스트에 저장 가능em.flush()
를 통해 현재까지의 변경 내용을 DB에 반영 가능em.find(Member.class, "memberA")
를 통해 memberA
멤버를 조회 가능
Entity 생명 주기
- 엔티티는
비영속
, 영속
, 준영속
, 삭제
등의 생명 주기를 가짐 비영속
: 엔티티 객체가 영속성 컨텍스트와 관련이 없는 상태영속
: 엔티티 객체가 영속성 컨텍스트에 저장되어 관리받는 상태준영속
: 엔티티 객체가 영속성 컨텍스트에 저장되었다가 분리된 상태삭제
: 엔티티 객체가 영속성 컨텍스트와 DB에서 삭제된 상태
영속성 컨텍스트의 특징
- 다음과 같은 특징들 존재
- 1차 캐시
- 영속성 컨텍스트 내부의 캐시
- 영속 상태의 엔티티를 저장
id - 엔티티
형태로 데이터를 저장하고, 조회 성능을 높여 줌
- 동일성 보장
- 영속성 컨텍스는 영속 상태의 엔티티들의 동일성을 보장함
- 같은 엔티티를 조회했을 때 같은 인스턴스를 얻을 수 있음
- 쓰기 지연
- 엔티티를 영속성 컨텍스트에 저장해도 바로 DB에 업데이트 하지 않음
INSERT
쿼리들은 영속성 컨텍스트 내의 쿼리 저장소에 저장됨flush()
혹은 트랜잭션이 커밋되면 저장된 쿼리들이 나감
- 변경 감지
- 영속성 컨텍스트는 엔티티가 수정되면 변경 사항을 자동으로 체크함
flush()
혹은 트랜잭션이 커밋되면 UPDATE
쿼리들이 나감
References
- 김영한 - 자바 ORM 표준 JPA 프로그래밍 - 기본편(https://www.inflearn.com/course/ORM-JPA-Basic)