플러시란?
영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것
플러시 발생하는 생기는 일
1) 변경 감지
2) 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
3) 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리)
영속성 컨텍스트를 플러시하는 방법
1) em.flush() : 직접 호출
2) 트랜잭션 커밋 : 플러시 자동 호출
3) JPQL 쿼리 실행 : 플러시 자동 호출
영속성 컨텍스트의 쓰기 지연 SQL 저장소에 쌓여있는 쿼리들을 DB에 반영시키는 명령이다.
JPQL 쿼리 실행시 플러시가 자동으로 호출되는 이유
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
query = em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();
만약 JPQL 쿼리를 실행하려고 하는데, 위처럼 쿼리들이 DB에 저장되지 않은 상태라면
문제가 발생할 수 있기 때문에 JPQL은 실행시 플러시가 자동으로 호출된다.
플러시 모드 옵션
em.stFlushMode(FlushModeType.COMMIT)
1) FlushModeType.AUTO : 커밋이나 쿼리를 실행할 때 플러시(기본값)
2) FlushModeType.COMMIT : 커밋할 때만 플러시 ( 위에서 JPQL 같은거 써도 플러시 안됨)
=> 단, 이건 잘 안 쓰이니 있다는걸 알고만 있자.
플러시 특징
1) 영속성 컨텍스트를 비우지 않음
2) 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
3) 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화하면 됨
'JPA' 카테고리의 다른 글
[JPA] 필드와 컬럼 매핑 (0) | 2023.07.15 |
---|---|
[JPA] 객체와 테이블 매핑 (0) | 2023.07.15 |
[JPA] 준영속 상태 (0) | 2023.07.13 |
[JPA] 영속성 컨텍스트2 (0) | 2023.07.13 |
[JPA] 영속성 컨텍스트 (0) | 2023.07.13 |