flush()

2021. 1. 17. 20:00JPA/JPA

flush()

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

flush()가 호출될때

  • em.flush() - 직접 호출
  • 트랜잭션 커밋 - 플러시 자동 호출
  • JPQL 쿼리 실행 - 플러시 자동 호출 -> JPQL이 실행되는 시점에 선행된 쿼리가 JPQL이 실행된 결과에 영향을 줄 수 있어 플러시가 자동 호출되는것이 기본값.

flush 모드 옵션

예시) em.setFlushMode(FlushModeType.COMMIT)

 

FlushModeType.AUTO - 커밋이나 쿼리를 실행할 때 플러시 (기본값)

FlushModeType.COMMIT - 커밋할 때만 플러시 -> JPQL이 실행되는 시점에 flush()를 자동 호출하지 않는것. JPQL이 실행되는 시점에 선행된 쿼리가 현재 JPQL과 아무 상관이 없다면 굳이 flush()를 호출할 필요가 없어 세팅하는 경우.