티스토리 뷰

★  플러시(flush)란?

- 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다. 

 

☆ 플러시 실행 후, 결과

 

1. 변경 감지가 동작해서 영속성 컨텍스트 내의 모든 엔티티를 스냅샷과 비교 후, 엔티티를 찾는다.

   수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다.

 

2. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.


☆ 영속성 컨텍스트를 플러시하는 방법

 

1. em.flush()를 직접 호출한다.

- 직접 호출은 영속성 컨텍스트를 강제로 플러시한다.

  테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용하지 않는다. 

 

2. 트랜잭션 커밋 시 플러시가 자동 호출된다.

- 트랜잭션만 커밋하면 어떤 데이터도 데이터베이스에 반영되지 않는다. 

  그래서 트랜잭션 커밋 전에 꼭 플러시를 호출해서 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영해야한다.

  이런 문제를 방지하기 위해 JPA는 플러시를 자동 호출해야한다.

 

3. JPQL 쿼리 실행 시 플러시가 자동 호출된다.

- JPQL이나 Crieterial 같은 객체자향 쿼리를 호출할 때도 플러시가 실행된다.


☆ 플러시 모드 옵션

 

- 엔티티 매니저에 플러시 모드를 직접 지정하려면 

  javax.persistence.FlushModeType을 사용하면 된다. 

 

1. FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 프러시(기본값)

    - 플러시 모드를 별도로 설정하지 않으면 AUTO로 동작

      따라서, 트랜잭션 커밋이나 쿼리 실행 시에 플러시를 자동으로 호출한다.

 

2. FlushModeType.COMMIT: 커밋할 때만 플러시

   - 성능 최적화를 위해 사용할 수 있다. 

 

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788960777330&orderClick=LAG&Kc=

 

자바 ORM 표준 JPA 프로그래밍 - 교보문고

스프링 데이터 예제 프로젝트로 배우는 전자정부 표준 데이터베이스 프레임 | ★ 이 책에서 다루는 내용 ★■ JPA 기초 이론과 핵심 원리■ JPA로 도메인 모델을 설계하는 과정을 예제 중심으로

www.kyobobook.co.kr