[JPA] EntityManager 에서 flush 의 역할

  1. 변경감지 (더티 체킹)
    • 영속성 컨텍스트의 경우 모든 엔티티의 스냅샷(최초 로드 상태) 을 보유함
    • flush 호출시 영속성 컨텍스트는 각 엔티티의 현재 상태와 스냅샷 비교
      • → 변경된 내용을 탐색 ( 속성의 변경)
  1. SQL 생성
    • 변경된 엔티티에 대해 SQL 생성
      • 새로운 엔티티
        • persist 로 호출 추가된 경우
        • INSERT 문 수행
      • 변경된 엔티티
        • 속성 값의 변경
        • UPDATE 문 수행
      • 삭제된 엔티티
        • remove 로 호출 추가된 경우
        • DELETE 문 수행
    • 고아 객체의 제거의 경우
      • orphanRemoval = true
      • 컬렉션에서 제거된 엔티티에 대해
      • DELETE 문을 생성
  1. 캐시 동기화
    • DB 실행 후 영속성 컨텍스트의 내부의 1차 캐시가 최신상태로 유지

FLUSH 자체가 트랜잭션을 COMMIT 하는 것은 아닙니다.

별도의 commit() 의 호출을 통해 트랜잭션의 커밋이 이루어집니다

flush 는

  1. 디비 동기화
  1. 커밋 전 DB에 영속성 컨텍스트의 상태를 반영할때

사요


Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA] 값 타입- 개요  (0) 2023.11.06
[JPA]고아 객체  (0) 2023.11.04
[JPA]영속성 전이 :저장  (0) 2023.11.04
JPA 복합 키  (0) 2023.11.04
[JPA] 즉시 로딩과 조인 전략  (0) 2023.11.04