개발자꿈나무
플러시 본문
★ 플러시(flush)
- 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 명령어
⭐︎ 플러시 실행 사
- 변경 감지 동작
- 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송
⭐︎ 플러시하는 방법
- 직접 호출
- 트랜잭션 커밋 시 플러시 자동 호출
- JPQL 쿼리 실행 시 플러시 자동 호출
⭐︎ 직접 호출
- em.flush()를 하게되면 영속성 컨텍스트를 강제로 플러시
- 웬만하면 거의 사용하지 않음
⭐︎ 트랜잭션 커밋
- 트랜잭션을 커밋하기 위해서는 변경 내용을 SQL로 반드시 전달해야 함
- JPA가 알아서 트랜잭션을 커밋하면 플러시를 자동으로 호출해줌
⭐︎ 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();
- memberA, B, C를 영속 상태로 만들어주고 JPQL을 실행하게 되면 엔티티들이 영속성 컨텍스트에는 존재하지만 실질적으로 데이터베이스에 반영되지 않았기 때문에 제대로 조회가 되지 않음
- 이를 방지하기 위해 JPQL을 실행하게 되면 자동으로 플러시를 호출해서 영속성 컨텍스트를 플러시하고 JPQL을 실행!
★ 플러시 모드 옵션
- 기본적으로 플러시는 커밋이나 쿼리를 실행할 때 플러시되도록 AUTO가 되어있지만 필요에 의해 커밋할 때만 플러시를 하도록 설정해줄 수 있음
FlushModeType.AUTO //커밋이나 쿼리를 실행할 때 플러시
FlushModeType.COMMIT //커밋할 때만 플러시
* 주의!
플러시라는건 영속성 컨텍스트의 변경 내역을 데이터베이스에 동기화해주는 것이지 영속성 컨텍스트를 초기화시킨다는 뜻이 아님!!
728x90
'자바 > JPA' 카테고리의 다른 글
객체와 테이블 매핑 (0) | 2023.07.25 |
---|---|
준영속 (0) | 2023.07.23 |
영속성 컨텍스트의 장점 (0) | 2023.07.23 |
엔티티 매니저 팩토리, 엔티티 매니저, 영속성 컨텍스트, 생명주기 (0) | 2023.07.09 |
JPA 프로젝트 생성 (0) | 2023.07.02 |