플러시

플러시(flush)

  • 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것
  • 커밋 될 때 실행됨
  • 영속성 컨텍스트의 변경 사항과 DB를 일치시키기 위해 쿼리를 날리는 과정
    1. 변경 감지
    2. 수정된 엔티티를 쓰기지연 SQL 저장소에 등록
    3. 쓰기지연 SQL 저장소의 쿼리를 DB에 전송 (등록, 수정, 삭제 쿼리)

영속성 컨텍스트를 플러시 하는 방법

  • emtityManager.flush() → 직접 호출하는 방법, 거의 사용하지 않는다.
  • 트랜잭션 커밋 → 플러시 자동호출
  • JPQL 쿼리 실행 → 플러시 자동호출
    오류 방지를 위해 무조건 flush 실행

flush를 강체호출하자 insert 쿼리가 실행되는 것을 볼 수 있다.

  • flush를 실행하면 1차 캐시가 지워지는가?
    • 1차캐시는 유지된다.
      • 영속성 컨텍스트 쓰기지연 SQL 저장소에 있는 쿼리들을 DB에 반영하는 과정이다.

플러시 모드 옵션

  • entityManager.setFlushMode(FlushModeType. {…} )
  1. AUTO
    • 기본값, 커밋이나 쿼리 실행 시 플러시 (권장)
  2. COMMIT
    • 커밋할 때만 플러시. 쿼리 실행시에는 플러시하지 않는다.

플러시 정리

  • 영속성 컨텍스트를 비우는 것이 아니다.
  • 영속성 컨텍스트의 변경내용을 DB에 동기화 한다.
  • 트랜잭션이라는 작업 단위가 중요하다. 커밋 직전에만 동기화 하면 된다.

 

 

 

 


 

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

'Spring > JPA 프로그래밍 - 기본편' 카테고리의 다른 글

객체와 테이블 매핑  (0) 2023.04.11
준영속 상태  (0) 2023.04.10
영속성 컨텍스트 2  (0) 2023.04.08
Hello JPA - 애플리케이션 개발  (0) 2023.03.28
Hello JPA - 프로젝트 생성  (0) 2023.03.27