김찬진의 개발 블로그

2023.12.21 [flush() 란?] 본문

1일1배움/JPA (김영한 님)

2023.12.21 [flush() 란?]

kim chan jin 2023. 12. 23. 18:13

flush() 는 다음 3가지 경우에 호출된다

1. em.flush() : 직접 호출

2. 트랜잭션 커밋 : 자동 호출 

3. JPQL 쿼리 실행 : 자동 호출

 

flush() 메카니즘은 다음과 같다.

1. flush() 호출

2. 더티 체킹 : 엔티티 매니저 1차 캐시에 저장되어있는 최초 영속 시점의 객체 상태(스냅샷)와 현재 변경한 객체 상태를 비교

3. 객체에 변경사항 있다면 분석하여 쓰기 지연 SQL 저장소에 상응하는 쿼리 저장

4. DB에 쿼리 날리기 

 

flush() 에 대해서 혼돈하지 말 것

1. flush() 는 1차 캐시를 비우는 것이 아니다

2. flush() 는 트랜잭션 단위로 실행되어야 한다

Comments