티스토리 뷰

JPA

[JPA] 플러시(flush)

hyuuny 2022. 1. 19. 01:10

플러시(flush

플러시(flush)는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것이다. 데이터베이스 transaction commit이 발생하면 자동 플러시(flush)가 발생한다. 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화하는 것이지 영속성 컨텍스트를 비우는 것은 아니다. transaction이라는 작업 단위가 있기 때문에 플러시(flush)가 동작 가능한것이다.

 

플러시(flush) 발생

플러시(flush)가 발생하면 다음과 같은 일이 발생한다.
1. 변경 감지(Dirty checking) 발생
2. 수정된 엔티티의 내용을 쓰기 지연 SQL 저장소에 등록
3. 쓰기 지연 SQL 저장소의 query를 데이터베이스에 전송(등록, 수정, 삭제)

 

영속성 컨텍스트 플러시(flush)하는 방법

개발을 하면서 직접 flush 할 일은 거의 없지만, 다음과 같은 행동을 했을 때 발생한다.
1. em.flush - 직접 호출
2. transaction commit - 자동 호출
3. JPQL query 실행 - 자동 호출

Member member = new Member(1L, "hyuuny");
em.persist(member);

// flush 시점에 Insert query 실행
em.flush();

System.out.println("============================");

tx.commit();

transaction.commit()전에 flush를 호출하였더니 DB에 Insert query를 보낸것을 확인할 수 있다.

 

옵션

JPA에서는 플러시(flush)의 2가지 옵션이 있지만, 사실상 기본 값인 AUTO만 사용한다.

em.setFlushMode(FlushModeType.COMMIT)
  • FlushModeType.AUTO
    • commit 또는 query를 실행할 때 플러시(기본 값)
  • FlushModeType.Commit
    • commit할 때만 플러시

'JPA' 카테고리의 다른 글

[JPA] 객체와 테이블 매핑  (0) 2022.01.24
[JPA] 준영속 상태(detach)  (0) 2022.01.19
[JPA] 영속성 컨텍스트(persistent-context)  (0) 2022.01.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함