티스토리 뷰
플러시(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
링크
TAG
- Spring
- MySQL
- 북클럽
- 데이터베이스
- mysql 8.0
- 릿코드
- 자료구조
- 스프링 부트
- 리팩토링
- 코테
- 백준
- 노마드
- Real MySQL
- webflux
- 구현
- 문자열
- leetcode
- 코틀린
- 알고리즘
- spring boot
- 파이썬
- kotlin
- 인프런
- 노마드코더
- 정렬
- 스프링부트
- 그리디
- 김영한
- Algorithm
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함