김찬진의 개발 블로그
2023.12.21 [flush() 란?] 본문
flush() 는 다음 3가지 경우에 호출된다
1. em.flush() : 직접 호출
2. 트랜잭션 커밋 : 자동 호출
3. JPQL 쿼리 실행 : 자동 호출
flush() 메카니즘은 다음과 같다.
1. flush() 호출
2. 더티 체킹 : 엔티티 매니저 1차 캐시에 저장되어있는 최초 영속 시점의 객체 상태(스냅샷)와 현재 변경한 객체 상태를 비교
3. 객체에 변경사항 있다면 분석하여 쓰기 지연 SQL 저장소에 상응하는 쿼리 저장
4. DB에 쿼리 날리기
flush() 에 대해서 혼돈하지 말 것
1. flush() 는 1차 캐시를 비우는 것이 아니다
2. flush() 는 트랜잭션 단위로 실행되어야 한다
'1일1배움 > JPA (김영한 님)' 카테고리의 다른 글
23/12/24 [단방향 매핑만으로 이미 연관관계 매핑은 완료된 것이다!] (0) | 2023.12.24 |
---|---|
23/12/24 [JPA 양방향 연관관계 매핑할 때 주인인 도메인 객체만 값을 써야 하나?] (0) | 2023.12.24 |
2023.12.21 [id 필드가 PK로써 SEQUENCE전략을 사용한다면 엔티티 매니저의 1차 캐시 기능은 사용불가?] (1) | 2023.12.23 |
2023.12.21 [id 필드가 PK로써 IDENTITY전략을 사용한다면 엔티티 매니저의 1차 캐시 기능은 사용불가?] (1) | 2023.12.23 |
2023.12.21 [entityManager.find() 는 commit() 전까지 쓰기 지연 SQL 저장소에 쿼리를 저장할까?] (1) | 2023.12.23 |
Comments