Web/JPA
플러시
프로그래멍
2020. 1. 30. 01:14
@영속성 컨텍스트를 플러시 하는 법
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)
플러시!!
- 영속성 컨텍스트를 비우지 않음
- 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
- 트랜잭션이라는 작업 단위가 중요 --> 커밋 직전에만 동기화 하면됨
모든건 트랜잭션 안에서 일어난다!