DOing
[JPA] 영속성 컨텍스트3 - 플러시 본문
➰ 플러시
: 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것이다.
: DB 트랜잭션이 커밋되면 플러시가 자동으로 발생된다.
: 플러시가 발생하면 변경감지(Dirty Checking), 수정된 엔티티를 쓰기지연SQL저장소에 등록하고 쓰기지연SQL저장소의 쿼리를 DB에 전송한다. 쓰기지연SQL저장소에는 등록/수정/삭제 쿼리등 모두 담겨 있다. 그걸 한번에 보낸다.
: 플러시는 영속성 컨텍스트를 비우는 것이 아니다!!⭐⭐
: 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화 하는 것이다.⭐⭐
: 보통 영속성 컨텍스트 주기와 트랜잭션 주기를 맞춘다.
트랜잭션이라는 작업단위가 중요하다 -> 커밋직전에만 동기화하면 된다!⭐
➰ 영속성 컨텍스트를 플러시하는 방법
1. em.flush() : 직접 호출
- > 주의점!!! : flush()를 한다고 1차캐시를 지우는 것은 아니다. 연속성 컨텍스트의 쓰기지연 SQL저장소가 반영되는 과정이라고 생각해라
2. 트랜잭션 커밋 : 플러시 자동호출
3. 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();
출처
: 인프런 강의 - 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편
'JPA' 카테고리의 다른 글
[JPA] 연속성 전이(CASCADE) (0) | 2021.07.15 |
---|---|
[JPA] Fetch - 즉시 로딩, 지연 로딩 (0) | 2021.07.14 |
[JPA] 영속성 컨텍스트2 - 영속성 컨텍스트의 이점 (0) | 2021.07.14 |
[JPA] 영속성 컨텍스트1 - 엔티티 생명주기 (0) | 2021.07.14 |
[JPA] 프록시(Proxy) (0) | 2021.07.14 |