영속성 컨텍스트
- 엔티티를 영구 저장하는 환경
- 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저느 영속성 컨텍스트에 엔티티를 보관하고 관리함
em.persist(member);
엔티티 생명주기
- 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 엔티티 객체를 생성만 한 순수한 객체 상태이며 아직 저장하지 않아 영속성 컨텍스트나 데이터베이스와 아무련 관련 없음
- 영속 : 영속성 컨텍스트에 저장된 상태
- 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장
- 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 함
- 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻
- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 됨
em.detach(member);
em.close();
em.clear():
- 삭제 : 삭제된 상태
- 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제함
영속성 컨텍스트의 특징
- 영속성 컨텍스트와 식별자 값
- 영속성 컨텍스트는 엔티티를 식별자 값(@Id로 테이블의 기본 키와 매핑한 값)으로 구분하기 때문에 영속 상태는 반드시 식별자 값이 있어야 함 -> 없으면 예외 발생
- 영속성 컨텍스트와 데이터베이스 저장
- JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데 이것을 플러시라고 함
- 영속성 컨텍스트가 엔티티를 관리할 때 장점
- 1차 캐시
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
📘 참고 도서 : 자바 ORM 표준 JPA 프로그래밍(저자 : 김영한)