플러시(flush) - slahsk/study GitHub Wiki
플러시(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) ; //커밋이나 쿼리를 실행할 때 플러시(기본값)