☕
java) til - 20240419
April 19, 2024
자바 ORM 표준 JPA 프로그래밍 - 기본편
플러시
플러시
영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것.
플러시 발생
데이터 트랜잭션이 일어나고 끝나면 플러시는 발생한다. 이때는 커밋이 일어난게 아니므로 보내기만 한 상태를 의미 한다.
알아두면 좋은 것!, 플러시가 발생한다고 1차 캐시가 지워지는 것이 아니다. 즉 영속성 컨텍스트 자체는 유지되고 데이터베이스에 반영만 우선 시키는 것이고 커밋으로 확정 전 상태를 만들어 두는 것이다.
- 변경감지
- 수정된 Enitty 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리)
영속성 컨텍스트를 플러시 하는 방법
em.flush()
: 직접 호출, 테스트용 혹은 강제 수동 쿼리로 쿼리 날아가는 것을 보고 싶을 때 사용이 가능하다.- 트랜잭션 커밋 : 플러시 자동 호출
- JPQL 쿼리 실행 : 플러시 자동 호출
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();
Flush 모드 옵션
굳이 쓸 일은 없지만 참고용으로 알아둘것
em.setFlushMode(FlushModeType.COMMIT)
FlushModeType.AUTO
: 커밋이나 쿼리를 실행할 때 플러시(기본값)FlushModeType.COMMIT
: 커밋 할 때만 플러시
플러시란
- 영속성 컨텍스트를 비우지 않는다.
- 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
- 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화 하면 됨