PersistenceContext( 영속성 컨텍스트 )
JPA에서 Entity를 조회하고, 조회된 Entity 데이터를 변경만 하면
DB에서 update되는데, 이를 Dirty Checking 이라함
JPA에서는 Entity를 조회하면 해당 Entity의 조회 상태 그대로 스냅샷을 생성
그리고 트랜잭션이 끝나는 시점에는 이 스냅샷과 비교해서 다른 점이 있다면 Update Query를 DB로 전달한다.
이런 상태 변경 검사의 대상은 PersistenceContext가 관리하는 Entity에만 적용된다.
//
JPA는 PersistenceContext를 생성하여 DB와 유사하게(가상의 DB처럼) Entity의 Life Cycle을 관리한다.
JPA는 PersistenceContext에 Entity를 보관할 때 최초의 상태를 저장함( 이것을 스냅샷이라고 함 )
PersistenceContext가 Flush(영속성 컨텍스트의 변경 내용을 DB에 반영하는 것)되는 시점에
스냅샷과 Entity의 현재 상태를 비교하여 달라진 Entity를 찾는다.
이후 변경된 필드들을 이용하여 쓰기 지연 SQL 저장소에 Update 쿼리를 생성하여 쌓아 둔다.
모든 작업이 끝나고 트랜잭션을 커밋을 하면
'이때' 쓰기 지연 SQL 저장소에 있는 쿼리들을 DB에 전달하여 Update를 진행한다.
https://study-easy-coding.tistory.com/143
[JPA] JPA에서 update하는 방법, 더티체킹과 벌크연산
토이 프로젝트 게시판을 구현하면서 CRUD의 Update를 구현할 일이 있었다. update를 구현하면서 내가 원하는 동작은 테이블에서 하나의 컬럼만(이름) 수정하는 것이었지만, update query가 나갈 경우 이
study-easy-coding.tistory.com
'Spring > DB연동' 카테고리의 다른 글
| SpringBoot에서 Redis로 데이터 저장,조회 (0) | 2024.06.24 |
|---|---|
| [JPA] @Entity 에서 컬럼이름 스네이크케이스로 자동변환됨 (0) | 2024.05.23 |
| Querydsl (0) | 2024.05.09 |
| JPA의 핵심 클래스들 (1) | 2024.05.09 |
| Resource , PathMatchingResourcePatternResolver (0) | 2024.04.25 |