플러시( flush() ) 란?
- 영속성 컨텍스트의 변경 내용을 SQL로 만들고 데이터베이스에 반영한다.
플러시 수행동작
- 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다.
- 변경이 확인된 엔티티는 수정 SQL을 만들고 쓰기지연 SQL저장소에 등록한다.
- 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. (C/R/U/D SQL 모두포함)
플러시 호출방법 3가지
- em.flush() -> 직접호출 ( 테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용안함 )
- 트랜잭션 커밋 -> 자동호출 ( 커밋할 때 알아서 SQL문을 만들어서 보내야 되기 때문에 JPA는 자동으로 호출한다. )
- JPQL 쿼리 실행 -> 자동호출 ( JPQL외에 영속성컨 텍스트에 기존에 반영되지 않은 엔티티가 남아 있을 수 있으므로 자동으로 flush() 를 호출한다.)
플러시 모드 옵션
- FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 실행
- FlushModeType.COMMIT : 커밋할 때만 실행
플러시 모드 옵션을 변경하고 싶다면 javax.persistence.FlushModeType를 사용하면 된다!!
'JPA > 영속성 관리' 카테고리의 다른 글
#04 영속성 컨테스트의 특정 - 엔티티 등록 / 수정 / 삭제 (0) | 2021.06.06 |
---|---|
#03 영속성 컨텍스트의 특징 - 엔티티 조회 (0) | 2021.06.05 |
#02 영속성 컨텍스트 / 엔티티의 생명주기 (0) | 2021.06.04 |
#01 엔티티 매니저 팩토리와 엔티티 매니저 (1) | 2021.06.04 |