플러시
엔티티 수정 변경 감지에서 flush 호출 돼서 엔티티와 스냅샷을 비교한다고 했음
플러시: 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
플러시 발생
변경 감지 → 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 → 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
데이터베이스가 커밋되면 플러시가 자동으로 일어난다.
영속성 컨텍스트 플러시 하는 방법
- em.flush() - 직접 호출
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
코드 실행 결과는 보면 ==============이 선을 기준으로 이전에 쿼리문이 날라갔다. 이 말은 즉슨 em.flush한 시점에서 쿼리가 db에 날라갔음을 보여준다. (commit이전에 flush에서 쿼리가 날라감.)
flush는 영속성 컨텍스트에 있는 쓰기 지연 SQL 저장소에 있는 쿼리들이 데이터베이스에 반영되는 과정이다.
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();
이런 상황에서 select문을 실행해도 데이터를 가져오지 못한다. 왜냐하면 아직 db에 데이터를 반영하지 않았고 1차 캐시에 영속인 상태이기 때문이다.
그래서 jpql을 실행하면 flush를 자동으로 호출해서 데이터를 db에 보내고 데이터를 가져오도록 하게 설계한 것이다.
플러시 특징
- 영속성 컨텍스트를 비우지 않는다
- 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화한다.
- 트랜잭션이라는 작업단위가 중요 → 커밋 직전에만 동기화 되면 된다.
플러시 모드 옵션
em.setFlushMode(FlushModeType.COMMIT)
FlushModeType.AUTO: 커밋이나 쿼리를 실행할 때 플러시(기본값)
FlushModeType.COMMIT: 커밋할 때만 플러시
플러시
엔티티 수정 변경 감지에서 flush 호출 돼서 엔티티와 스냅샷을 비교한다고 했음
플러시: 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영
플러시 발생
변경 감지 → 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 → 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
데이터베이스가 커밋되면 플러시가 자동으로 일어난다.
영속성 컨텍스트 플러시 하는 방법
- em.flush() - 직접 호출
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
코드 실행 결과는 보면 ==============이 선을 기준으로 이전에 쿼리문이 날라갔다. 이 말은 즉슨 em.flush한 시점에서 쿼리가 db에 날라갔음을 보여준다. (commit이전에 flush에서 쿼리가 날라감.)
flush는 영속성 컨텍스트에 있는 쓰기 지연 SQL 저장소에 있는 쿼리들이 데이터베이스에 반영되는 과정이다.
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();
이런 상황에서 select문을 실행해도 데이터를 가져오지 못한다. 왜냐하면 아직 db에 데이터를 반영하지 않았고 1차 캐시에 영속인 상태이기 때문이다.
그래서 jpql을 실행하면 flush를 자동으로 호출해서 데이터를 db에 보내고 데이터를 가져오도록 하게 설계한 것이다.
플러시 특징
- 영속성 컨텍스트를 비우지 않는다
- 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화한다.
- 트랜잭션이라는 작업단위가 중요 → 커밋 직전에만 동기화 되면 된다.
플러시 모드 옵션
em.setFlushMode(FlushModeType.COMMIT)
FlushModeType.AUTO: 커밋이나 쿼리를 실행할 때 플러시(기본값)
FlushModeType.COMMIT: 커밋할 때만 플러시
'JPA' 카테고리의 다른 글
연관관계 매핑 기초 (0) | 2023.11.02 |
---|---|
엔티티 매핑 (1) | 2023.10.29 |
영속성 관리 - JPA 내부 동작 방식 (0) | 2023.10.28 |
JPA 동작 확인 (0) | 2023.10.28 |
JPA 기본 설정 (0) | 2023.10.28 |