EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
//변경감지
Member member1 = new Member(1L, "son");
Member member2 = new Member(2L, "choi");
Member member3 = new Member(3L, "kim");
em.persist(member1);
em.persist(member2);
em.persist(member3);
em.flush();
Member member = em.find(Member.class, 3L);
member.setName("changedName");
System.out.println("===========B");
Thread.sleep(2000);
member.setId(11L);
//
System.out.println("===========C");
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
emf.close();
}
flush는 단순 데이터 동기화만 되고, 트랙젝션을 끝내지는 않는다.
flush를 한다고 해서 1차캐시의 데이터가 초기화 되지는 않는다. clear()를 통해 초기화할수는 있다.
(출처 : 김영한 JPA자 바 ORM 표준 JPA 프로그래밍 - 기본편)