본문 바로가기

Web/JPA

플러시

@영속성 컨텍스트를 플러시 하는 법

 1. em.flush() - 직접호출

 2. 트랜잭션 커밋 - 플러시 자동 호출

 3. 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();

   : member A,B,C 가 commit 전에는 쿼리가 날라가지 않음.. 

     JPQL 은 1차캐시에서 먼저 찾지 않고 DB에서 찾은 후 1차 캐시에 저장

     1차 캐시에 같은게 있으면 쿼리에서 찾은거 버림... 그래서 동일성

     결론, 잘못을 방지하기위해 flash를 날려버림

 

@ 플러시 모드 옵션

//커밋할 때만 플러시 하겠다
em.setFlushMode(FlushModeType.COMMIT)

 

플러시!!

 - 영속성 컨텍스트를 비우지 않음

 - 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화

 - 트랜잭션이라는 작업 단위가 중요 --> 커밋 직전에만 동기화 하면됨

 

모든건 트랜잭션 안에서 일어난다!

'Web > JPA' 카테고리의 다른 글

고급매핑  (0) 2020.02.03
다양한 연관관계 매핑  (0) 2020.02.02
연관관계 매핑 기초  (0) 2020.02.01
엔티티 매핑  (0) 2020.01.31
영속성 관리 && 준영속성  (0) 2020.01.29