본문 바로가기
BackEnd/SpringBoot

플러시 flush()

by pan5158 2022. 5. 26.

 

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

 

플러시를 실행하면 구체적으로 일어나는 특징을 알아보도록 하겠습니다.

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

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

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

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

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

 

1). 직접 호출

엔티티 매니저의 flush() 메소드를 직접 호출해서 영속성 컨텍스트를 강제로 플러시한다. 테스트나 다른 프레임워크와 JPA를 함께 사용 할 때를 제외하고 거의 사용하지 않는다.

 

2). 트랙잭션  커밋시 플러시 자동 호출

데이터베이스에 변경 내용을 SQL로 전달하지 않고 트랜잭션만 커밋하면 어떤 데이터도 데이터베이스에 반영하지 않는다. 따라서 트랜잭션을 커밋하기 전에 꼭 플러시를 호출해서 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영해야한다. JPA는 이런 문제를 예방하기 위해 트랜잭션을 커밋할 때 플러시를 자동으로 호출한다.

 

 

 

 

'BackEnd > SpringBoot' 카테고리의 다른 글

Mustache 한글깨짐  (0) 2022.06.20
연관 관계 매핑  (0) 2022.05.11
java.io.EOFException: null  (0) 2022.05.07
H2 Database 설치  (0) 2022.04.30
UserDetailService  (0) 2022.04.27