객체 모델과 관계형 데이터 베이스 모델의 패러다임이 다르고 이를 극복하고자 개발자가 많은 시간과 코드를 소비한다.
데이터베이스 중심 모델에서 객체 모델링으로 패러다임 불일치를 해결 해주고 정교한 객체 모델링을 유지하게 도와준다.
-
영속성 컨텍스트 엔티티 매니저를 통해서 엔티티를 영구 저장하는 환경이다.
-
엔티티 생명주기 비영속성 : 엔티티 객체를 생성하였으나, 순수한 객체 상태이며 아직 저장하지 않은 상태
영속성 : 엔티티 매니저를 통하여 객체를 저장하엿을 때 영속성 컨텍스트가 관리하는 상태
준 영속성 : 영속성 컨텍스트에서 관리하던 엔티티가 매니저가 닫거나 정리되면서 분리된 상태를 의미한다. 비영속성 상태와 비슷하나 키를 갖고 있다.
삭제 : 엔티티를 영속성 컨텍스트와 데이터 베이스에서 삭제한 상태 -
영속성 컨텍스트의 특징
- 식별자 값을 반드시 가지고 있어야 한다. 없는 경우 예외를 발생한다.
- 영속성 컨텍스트와 데이터 베이스는 보통 트랜잭션 커밋하는 순간 엔티티의 값들을 반영한다 이를 플러시라고 한다.
- 영속성 컨텍스트의 장점
- 1차 캐시
- 동일성 보장
- 쓰기 지연
- 변경 감지
- 지연 로딩
- 기본 키 매핑
- 필드와 컬럼 매핑
- 단방향
- 양방향
- 연간관계 주인 설정
- 양방향 연간관계의 주의점
- 1:1
- 1:N
- N:1
- N:M
- 상속 관계 매핑
- @MappedSuperclass
- 복합키의 식별관계 - 비식별관계
- 즉시로딩
- 지연로딩
- 영속선 전이
- 고아 객체
- 기본값 타입
- 임베디드 타입(복합 값)
- 값 타입의 불변객체
- 값 타입의 비교
- 값 타입 컬렉션 사용
- JPQL
- Criteria
- QueryDSL
- NativeSQL
- 벌크 연산
- 영속성 컨텍스트와 JPQL
- JPQL과 플러시 모드