본문 바로가기

JPA/영속성 관리

#05 플러시 란?

플러시( flush() ) 란? 

  • 영속성 컨텍스트의 변경 내용을 SQL로 만들고 데이터베이스에 반영한다.

플러시 수행동작

  1. 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다.
  2. 변경이 확인된 엔티티는 수정 SQL을 만들고 쓰기지연 SQL저장소에 등록한다.
  3. 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. (C/R/U/D SQL 모두포함)

플러시 호출방법 3가지

  1. em.flush() -> 직접호출 ( 테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용안함 )
  2. 트랜잭션 커밋  -> 자동호출 ( 커밋할 때 알아서 SQL문을 만들어서 보내야 되기 때문에 JPA는 자동으로 호출한다. )
  3. JPQL 쿼리 실행 -> 자동호출 ( JPQL외에 영속성컨 텍스트에 기존에 반영되지 않은 엔티티가 남아 있을 수 있으므로 자동으로 flush() 를 호출한다.)

플러시 모드 옵션

  • FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 실행
  • FlushModeType.COMMIT : 커밋할 때만 실행

플러시 모드 옵션을 변경하고 싶다면 javax.persistence.FlushModeType를 사용하면 된다!!