[정리] 플러시 (flush())

📝 플러시

  • 플러시(flush())는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다.
  • 플러시라는 이름으로 인해 영속성 컨텍스트에 보관된 엔티티를 지운다고 생각하면 안 된다. 즉, 변경내용을 데이터베이스에 동기화하는 것이 플러시이다.

1. 동작방법

  1. 변경감지가 동작해서 영속성 컨텍스트에 잇는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다.
  2. 쓰기지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다

2. 영속성 컨텍스트를 플러시하는 3가지 방법

  1. em.flush() 호출
  2. 트랜잭션 커밋 시 flush() 자동호출
  3. JPQL 쿼리 실행 시 flush() 자동호출
em.persist(memberA)
em.persist(memberB)

//JPQL
query = em.createQuery("select m from Member m", Member.class);
  • JPQL은 SQL로 변환되어 DB에서 엔티티를 조회환다. 그런데 memberA, memberB는 아직 DB에 있지 않다. 그래서 쿼리 실행 전 플러시를 해줘야 한다.

3. 옵션

  • FlushModeType.AUTO : 커밋이나 쿼리 실행 시(default)
  • FlushModeType.COMMIT : 커밋할 때만

'📚 Spring > Spring JPA' 카테고리의 다른 글

[Spring JPA #7] 7장. 고급매핑  (0) 2023.08.26
[정리] 준영속  (0) 2022.03.17
[정리] 영속성 컨텍스트 및 엔티티  (0) 2022.03.15
@JsonIgnore  (0) 2020.09.04
[Spring JPA #12] 커스텀 리포지토리  (0) 2020.07.22

댓글

Designed by JB FACTORY