Spring JPA
[Spring JPA] 플러시
hoondev3
2023. 1. 17. 18:46
플러시
플러시는 영속성 컨텍스트의 변경내용을 DB에 동기화하는 작업이다.
플러시가 일어나면 더티 체킹(변경 감지), 수정된 엔티티를 쓰기 지연 SQL 저장소에 저장 후 DB에 쿼리 전송 같은 작업이 일어난다.
플러시 하는 방법
- em.flush(): 직접 호출
- 트랜잭션 커밋: 플러시 자동 호출
- JPQL쿼리 실행: 플러시 자동 호출
JPQL 쿼리 실행 시 플러시가 자동으로 호출되는 이유
영속성 컨텍스트에 있지만 플러시는 되지 않은 객체를 찾는 쿼리 날린다고 가정해 보자. 플러시 되지 않은 객체는 DB에 값이 없으므로 조회되지 않는다. 그럼 이 쿼리는 아무것도 찾지 못할 것이다. 이처럼 객체를 찾는 쿼리를 성공시키기 위해서 플러시를 호출한다.
모드 옵션
- FlushModeType.AUTO: 커밋이나 쿼리를 실행할때 플러시 (기본값)
- FlushModeType.COMMIT: 커밋할때만 플러시