728x90
영속성 콘텍스트의 변경내용을 데이터베이스에 반영
플러시 발생
- 변경 감지
- 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
영속성 컨텍스트를 플러시 하는 방법
em.flush() - 직접 호출

- flush()를 하게 된다고 해도, 1차 캐시가 사라지는 것이 아닌 쓰기 지연 SQL 저장소에 존재하는 쿼리와, 더티 체크가 일어나는 것일 뿐이다.
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
JPQL 쿼리 실행시 플러시가 자동으로 호출되는 이유
- 중간에 JPQL을 실행하면 자동으로 Flush()가 호출된다.
플러시 모드 옵션
em.setFlushMode(FlushModeType.COMMIT)
- FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시 (기본값)
- FlushModeType.COMMIT : 커밋할 때만 플러시
- 기본값이 AUTO인 이유는 JPQL같은 경우 쿼리를 DB에 바로 적용하기에 DB와 영속성 컨택스트가 데이터 동기화가 안되어 있을 수 있다 -> 따라서 JPQL을 사용한 뒤에는 반드시 flush()를 적용해야 한다.
정리(Flush)
- 영속성 컨텍스트를 비우지 않음
- 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
- 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화하면 됨
728x90
'자바 ORM 표준 JPA 프로그래밍(인프런)' 카테고리의 다른 글
| Ch04. 엔티티 매핑 - 객체와 테이블 매핑 (0) | 2021.12.10 |
|---|---|
| Ch03. 영속성 관리(내부 동작 방식) - 준영속 상태 (0) | 2021.12.09 |
| Ch03. 영속성 관리(내부 동작 방식) - 영속성 컨텍스트 (0) | 2021.12.09 |
| Ch02. JPA 시작 - 애플리케이션 개발 (0) | 2021.12.08 |
| Ch02. JPA 시작 - 프로젝트 생성 (0) | 2021.12.08 |