728x90
- JPA는 트랜잭션 : DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다가 마지막에 영구적으로 변경을 반영하는 것 처럼 JPA에서도 영속성 컨텍스트로 관리하고 있는 변경이 발생한 객체들의 정보를 쓰기 지연 저장소에 전부 가지고 있다가 마지막에 SQL을 한번에 DB에 요청해 변경을 반영합니다.
- JPA는 이를 구현하기 위해 쓰기 지연 저장소를 만들어 SQL을 모아두고 있다가 트랜잭션 commit 후 한번에 DB에 반영합니다.
flush()
- 트랜잭션 commit 후 쓰기 지연 저장소의 SQL들이 한번에 요청됨
- 사실 트랜잭션 commit 후 추가적인 동작이 있는데 바로 em.flush(); 메서드의 호출
- flush 메서드는 영속성 컨텍스트의 변경 내용들을 DB에 반영하는 역할을 수행
- 즉, 쓰기 지연 저장소의 SQL들을 DB에 요청하는 역할을 수행합니다.
fulsh 정리
영속성 컨텍스트를 비우지 않음
영속성 컨텍스트의 변경내용을 데이터베이스에 반영(동기화)
트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화 하면 됨
fulsh 발생
- 변경 감지
- 수정된 엔티티 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
영속성 컨텍스트를 fulsh 하는 방법
- em.flush() - 직접 호출
- 트랜잭션 커밋 - 플러시 자동 호출
- JPQL 쿼리 실행 - 플러시 자동 호출
플러시 모드 옵션
- FlushModeType.AUTO 커밋이나 쿼리를 실행할 때 플러시 (기본값)
- FlushModeType.COMMIT 커밋할 때만 플러시
'JPA' 카테고리의 다른 글
[JPA] Entity의 상태 (0) | 2023.07.09 |
---|---|
[JPA] 변경감지 (Dirty Checking) (1) | 2023.07.09 |
[JPA] 1차 캐시 (0) | 2023.07.09 |
[JPA] 트랜잭션 (0) | 2023.07.09 |
[JPA] 영속성 컨텍스트 (0) | 2023.07.09 |