참고

플러시

  • 영속성 컨텍스트의 변경내용을 데이터베이스에 반영
  • 보통 DB 트랜잭션이 커밋될때, flush 발생
  • DB와 영속성 컨텍스트의 상태를 같게한다.

플러시 발생

  • 변경 감지
  • 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
  • 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
  • flush가 발생되면 1차캐시는 날라가지 않고 유지된다.

영속성 컨텍스트를 플러시 하는 방법

  • em.flush() - 직접 호출
  • 트랜잭션 커밋 - 플러시 자동 호출
  • JPQL 쿼리 실행 - 플러시 자동 호출

JPQL 쿼리 실행 시, 플러시가 자동으로 호출되는 이유

 em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
//중간에 JPQL 실행
query = em.createQuery("select m from Member m", Member.class);
List<Member> members= query.getResultList();
  • 위의 코드처럼 작성될때, 플러시가 자동으로 호출 안되면 쿼리결과는 비어있을것이다.

플러시 모드 옵션

em.setFlushMode(FlushModeType.COMMIT)
  • FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때, 플러시 (기본 값)
  • FlushModeType.COMMIT : 커밋할때만 플러시

결론

  • 플러시는 영속성 컨텍스트를 비우지 않음
  • 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
  • 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화 하면 됨
profile
모든 것을 즐길줄 아는 개발자입니다!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN