더티 체킹

2023. 5. 7. 22:02JPA

◎ 더티 체킹(Dirty Checking)

-> 트랜잭션 내에서 엔티티의 변경이 감지되면 변경 사항을 자동으로 db에 반영하는 것이다.

-> 영속성 컨텍스트의 1차 캐시에는 id, entity, 스냅샷이 있다. 스냅샷은 값을 읽어온 최초 시점의 상태를 저장한 것이다.

-> 만약 값이 변경되면 JPA가 커밋되는 시점에 내부적으로 flush가 호출되면서 엔티티와 스냅샷을 비교한다. 만약 현재 엔티티의 상태가 스냅샷과 다르다면 업데이트 쿼리를 쓰기 지연 SQL 저장소에 저장하고, 해당 쿼리를 db에 반영하여 변경된 값을 커밋한다.

더티 체킹 과정

 

-> 예시

- id가 1이고, 이름이 hong인 member 객체가 저장되어 있다.

 

- 아이디가 1인 객체를 찾고, 해당 객체의 이름을 AAAAA로 변경하기만 하면, 변경된 엔티티와 기존에 저장되어 있던 스냅샷을 비교하여 변경이 일어났다면 쓰기 지연 SQL 저장소에 update 쿼리를 생성하고, 해당 쿼리를 db에 반영하여 변경한다.

- h2 데이터베이스를 통해 결과를 확인해보면 이름이 AAAAA로 변경된 것을 확인할 수 있다.

 

★ 참고

자바 ORM 표준 JPA 프로그래밍 - 기본편

'JPA' 카테고리의 다른 글

준영속 상태  (0) 2023.05.07
flush  (0) 2023.05.07
식별자 전략  (0) 2023.02.28
JPA  (0) 2023.02.23
JPA 프로젝트 생성하고 실행하기  (0) 2022.03.12