영속성 컨텍스트의 변경 내용을 DB에 반영
변경 감지 -> 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 -> 쿼리를 DB에 전송
(commit()
시점에 자동으로 flush()
가 발생한다)
em.flush()
: 직접 호출tx.commit()
: 플러시 자동 호출public class JpaMain {
public static void main(String[] args) {
...
Member member = new Member(1L, "ABC");
entityManager.persist(member);
entityManager.flush();
System.out.println("---------------");
tx.commit();
}
}
Hibernate:
/* insert hellojpa.Member
*/ insert
into
Member
(name, id)
values
(?, ?)
---------------
flush()
를 직접 호출하게 되면, 즉시 Query가 DB에 반영된다.
-> 이후 commit()
시점에 해당 쿼리가 나가지 않는 것을 확인할 수 있다.
memberA, memberB, memberC를 영속상태로 만들었다.
DB에서 세 객체를 조회하고 싶어 "select m from Member m" JPQL을 실행했다.
JPQL 실행 시 flush()
가 호출되지 않아 세 객체가 DB에 저장되지 않았다면,
DB에서 세 객체를 불러올 수 없을 것이다.
따라서 JPQL 실행 시 자동으로 flush()
가 호출 되는 것을 알 수 있다.
FlushModeType.AUTO
FlushModeType.COMMIT
flush()
가 호출되지 않는다.-> 그냥 FlushModeType.AUTO를 이용하자.
참고 :
김영한. 『자바 ORM 표준 JPA 프로그래밍』. 에이콘, 2015.