JPA flush, commit DB 반영

박용민·2024년 1월 18일
0

JPA flush와 commit을 공부하는 궁금한 점을 발견했다.

// EntityManager em;

Memo memo = new Memo();
memo.setId(4L);
memo.setUsername("Flush");
memo.setContents("Flush() 메서드 호출");
em.persist(memo);

System.out.println("flush() 전");
em.flush();
System.out.println("flush() 후\n");


System.out.println("트랜잭션 commit 전");
et.commit();
System.out.println("트랜잭션 commit 후");
  • em.persist(memo) => actionQueue insert 쓰기 지연(size=1)

  • em.flush()

  • insert query문 확인

  • DB에는 반영이 되어 있지 않다???

  • em.commit()

flush를 다시 공부했을때 그 원인을 알게 되었다.

flush

  • 연속성 컨테스트의 변경된 내용을 DB에 반영하는 작업
  • 일반적으로 트렌잭션 커밋 시 자동으로 수행되지만 flush 메소드를 명시적으로 호출 가능
  • 영속성 컨테슥트를 강제로 비워 변경 내용을 DB에 저장
  • flush를 호출하더라도 트랜잭션이 커밋되기 전까지는 데이터베이스 변경 내용이 적용되지 않는다. 여러 작업을 한번에 처리하고 트랜잭션이 성공적으로 완료될 때 DB에 반영된다.

마지막 내용 즉 트랜잭션 작업으로 인해서 도중에 실패하는 작업이 있을 수 있다 때문에 중간에 ROLLBACK을 수행할 수 있기에 모든 작업이 완료된 이후에 DB에 반영하는것이다.

[참고자료]

0개의 댓글