개발자꿈나무

플러시 본문

자바/JPA

플러시

망재이 2023. 7. 23. 18:40

★ 플러시(flush)

- 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 명령어

 

⭐︎ 플러시 실행 사

  1. 변경 감지 동작
  2. 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록
  3. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송

 

⭐︎ 플러시하는 방법

  • 직접 호출
  • 트랜잭션 커밋 시 플러시 자동 호출
  • JPQL 쿼리 실행 시 플러시 자동 호출

 

⭐︎ 직접 호출

- em.flush()를 하게되면 영속성 컨텍스트를 강제로 플러시

- 웬만하면 거의 사용하지 않음

 

⭐︎ 트랜잭션 커밋

- 트랜잭션을 커밋하기 위해서는 변경 내용을 SQL로 반드시 전달해야 함

- JPA가 알아서 트랜잭션을 커밋하면 플러시를 자동으로 호출해줌

 

⭐︎ JPQL 쿼리 실행

em.persist(memberA);
em.persist(memberB);
em.persist(memberC);

//JPQL 실행
query = em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();

- memberA, B, C를 영속 상태로 만들어주고 JPQL을 실행하게 되면 엔티티들이 영속성 컨텍스트에는 존재하지만 실질적으로 데이터베이스에 반영되지 않았기 때문에 제대로 조회가 되지 않음

- 이를 방지하기 위해 JPQL을 실행하게 되면 자동으로 플러시를 호출해서 영속성 컨텍스트를 플러시하고 JPQL을 실행!

 

★ 플러시 모드 옵션

- 기본적으로 플러시는 커밋이나 쿼리를 실행할 때 플러시되도록 AUTO가 되어있지만 필요에 의해 커밋할 때만 플러시를 하도록 설정해줄 수 있음

FlushModeType.AUTO //커밋이나 쿼리를 실행할 때 플러시
FlushModeType.COMMIT //커밋할 때만 플러시

 

* 주의!

플러시라는건 영속성 컨텍스트의 변경 내역을 데이터베이스에 동기화해주는 것이지 영속성 컨텍스트를 초기화시킨다는 뜻이 아님!!

728x90

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

객체와 테이블 매핑  (0) 2023.07.25
준영속  (0) 2023.07.23
영속성 컨텍스트의 장점  (0) 2023.07.23
엔티티 매니저 팩토리, 엔티티 매니저, 영속성 컨텍스트, 생명주기  (0) 2023.07.09
JPA 프로젝트 생성  (0) 2023.07.02