영속성 컨텍스트란?
엔티티의 생명주기
영속성 컨텍스트의 특징
- 1차 캐시
- 데이터베이스에서 조회 시, 1차 캐시가 비어있을 경우에 데이터베이스에서 조회하고 1차 캐시에 데이터가 있는 경우 1차 캐시에서 바로 데이터를 조회할 수 있다.
- 성능적인 이점보다는 객체적인 이점이 존재한다.
- 동일성 보장
- 쓰기 지연 기능 지원
- 쓰기 지연 SQL 저장소가 존재한다.
- 데이터 Insert시, 저장소에 저장을 하고 트랜잭션 커밋 시점에 flush가 되면서 적용된다.
- hibernate.jdbc.batch_size로 갯수 조절이 가능하다.
- 추후 성능에 대한 이점이 된다.
- 변경 감지 (더티 체킹)
- flush -> 엔티티와 스냅샷 비교 -> UPDATE SQL 생성 -> flush -> commit
- 스냅샷이란?
- 엔티티와 스냅샷 비교시에 데이터 변경이 있을 경우 UPDATE
- UPDATE SQL이 없어도 데이터 변경이 있으면 자동으로 UPDATE 처리
플러시
- 영속성 컨텍스트의 변경내용을 데이터베이스에 반영
- 변경 감지
- 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
- 트랜잭션 커밋 시에 자동으로 호출된다.
- 1차 캐시 변경 없이 쓰기 지연 SQL 저장소를 다룬다.
영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
- 플러시 모드 옵션
- FlushModeType.AUTO : 커밋이나 쿼리 실행할 때 플러시 (default)
- FlushModeType.COMMIT : 커밋할 때만 플러시
준영속 상태
- 데이터 조회시 영속 상태가 된다.
- 준영속 상태?
- 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되는 것
- 영속성 컨텍스트가 제공하는 기능을 사용 못함
- 준영속 상태 방법