영속성 컨텍스트란?
- JPA를 이해하는 데 가장 중요한 용어
- 엔티티를 영구 저장하는 환경
- 여러 엔티티 매니저가 같은 영속성 컨텍스트에 접근할 수도 있음
엔티티 생명주기
비영속
- 순수한 객체 상태
- 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없음
영속
- 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 함
- 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻
준영속
- 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 됨
삭제
- 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제
영속성 컨텍스트의 특징
- 영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분하므로 영속 상태는 식별자 값이 반드시 있어야 함
- JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데 이것을 플러시(flush)라 함
- 장점
- 1차캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
엔티티 조회
- 영속성 컨텍스트 내부에 1차 캐시라는 Map이 하나 있는데 키는 @Id로 매핑한 식별자고 값은 엔티티 인스턴스
- 영속성 컨텍스트는 성능상 이점과 엔티티의 동일성을 보장
Member a = em.find(Member.class, "member1"); //데이터베이스 조회
Member b = em.find(Member.class, "member1"); //1차캐시 조회
System.out.println(a == b); //참
엔티티 등록
- 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 데이터베이스에 엔티티를 저장하지 않고 내부 쿼리 저장소에 INSERT SQL을 모아둔다.
- 그리고 트랜잭션을 커밋할 때 모아둔 쿼리를 데이터베이스에 보내서 저장시킨다. 이를 트랜잭션을 지원하는 쓰기 지연이라 한다.
출처도서 : 자바 ORM 표준 JPA 프로그래밍 - 김영한 지음
'JPA' 카테고리의 다른 글
[개념] JPA 프로그래밍 - 07. 고급매핑 (0) | 2019.12.27 |
---|---|
[개념] JPA 프로그래밍 - 06. 다양한 연관관계 매핑 (0) | 2019.12.27 |
[개념] JPA 프로그래밍 - 05. 연관관계 매핑 기초 (0) | 2019.12.27 |
[개념] JPA 프로그래밍 - 04. 엔티티 매핑 (0) | 2019.12.27 |
[개념] JPA 프로그래밍 - 01. JPA 소개 (0) | 2019.12.27 |