Skip to content
김희준 edited this page Mar 23, 2017 · 1 revision

플러시

플러시(flush())는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다.

  • 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다.
  • 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.

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

  • 직접호출 : em.flush() 거이 사용하지 않는다(테스트, 다른 프레임워크와 JPA 사용할때 사용)
  • 트랜잭션 커밋 시 플러시 자동 호출
  • JPQL 쿼리 실행시 플러시 자동 호출
  em.persist(memberA);
  em.persist(memberB);
  em.persist(memberC);

  query = em.createQuery("select m from Member m", Member.class);
  List<Member> members = query.getResultList();

JPQL을 싱행할 때도 플러시를 자동 호출한다.

따라서 memberA, memberB, memberC 쿼리 결과에 포함된다.

참고로 식별자를 기준으로 조회하는 find() 메소드를 호출할 떄는 플러시가 실행되지 않는다.

플러시 모드 옵션

  em.setFlushMode(FlushModeType.COMMIT) ; //커밋할 때만 플러시

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

Clone this wiki locally