[JPA 기본] 플러시 (flush)

강신현·2022년 7월 6일
0

flush

영속성 컨텍스트의 변경내용을 데이터베이스에 반영

  • Transaction commit 이 일어날 때 flush가 동작하는데,
    이때 쓰기 지연 저장소에 쌓아 놨던 INSERT, UPDATE, DELETE SQL들이 DB에 날라간다.
    (영속성 컨텍스트, 1차 캐시를 비우는 것이 아님)
  • 쉽게 얘기해서 영속성 컨텍스트의 변경 사항들과 DB의 상태를 맞추는 작업(동기화)이다.
    (커밋 직전에 동기화가 되어야 함)

https://gmlwjd9405.github.io/2019/08/07/what-is-flush.html

flush 과정

  1. 변경 감지
  2. 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
  3. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)

영속성 컨텍스트를 flush하는 방법

  • em.flush() - 직접 호출
// 영속 상태 (Persistence Context 에 의해 Entity 가 관리되는 상태)
Member member = new Member(200L, "A");
entityManager.persist(member);

entityManager.flush(); // 강제 호출 (쿼리가 DB 에 반영됨)

System.out.println("=================");

tx.commit(); // DB에 insert query 가 날라가는 시점 (Transaction commit)
  • 트랜잭션 커밋 - 플러시 자동 호출
  • JPQL 쿼리 실행 - 플러시 자동 호출

옵션

em.setFlushMode(FlushModeType.COMMIT)
  • FlushModeType.AUTO
    커밋이나 쿼리를 실행할 때 플러시 (기본값)
  • FlushModeType.COMMIT
    커밋할 때만 플러시

강사님은 그냥 오토로 쓰는 걸 권장한다고 함

profile
땅콩의 모험 (server)

0개의 댓글