Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[JPA] 영속성 컨텍스트3 - 플러시 본문

JPA

[JPA] 영속성 컨텍스트3 - 플러시

mangdo 2021. 7. 14. 21:30

플러시

 : 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것이다.

 : 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 프로그래밍 - 기본편