flush()로 직접 호출.@Test
@DisplayName("flush() 메서드 확인")
void test7() {
EntityTransaction et = em.getTransaction();
et.begin();
try {
Memo memo = new Memo();
memo.setId(4L);
memo.setUsername("Flush");
memo.setContents("Flush() 메서드 호출");
em.persist(memo);
System.out.println("flush() 전");
em.flush(); // flush() 직접 호출
System.out.println("flush() 후\n");
System.out.println("트랜잭션 commit 전");
et.commit();
System.out.println("트랜잭션 commit 후");
} catch (Exception ex) {
ex.printStackTrace();
et.rollback();
} finally {
em.close();
}
emf.close();
}
위 코드를 보면 Memo Entity를 영속화 한 후 commit() 호출 전에 flush()를 호출하는 것을 볼 수 있다. 위 코드를 실행하면?

commit() 호출 전에 Hiberante가 쿼리를 전송하는 것을 확인 할 수 있다. 추가로 디버깅을 통해 ActionQueue가 비워지는 것도 확인해보자.

flush() 호출 전에는 ActionQueue에 Insert 쿼리가 하나 존재하지만,

flush()를 호출하면 ActionQueue가 비워진다. DB에게 전송된 것이다.