JPA Dirty Checking
정의
JPA Dirty Checking 이란
영속성 컨테이너가 관리하는 엔티티의 상태를 감지하여, 변경된 부분이 있다면, 트랜잭션이 끝나는 시점에 데이터베이스에 반영하는 기능
Dirty Checking LifeCycle
- 영속성 컨텍스트에서 관리되는 Entity를 처음 조회할 때, Snapshot 생성
- Transaction 커밋 되기 전까지 영속성 컨텍스트는 변경사항을 추적하기만 하고, DB에는 반영하지 않음
- Transaction 커밋 시점에 Entity 와 Snapshot을 비교하여 다른점이 있다면 Update Query 전달
tip
Dirty Checking 으로 생성되는 update쿼리는 모든 필드를 업데이트 하는 방식을 기본값으로 사용하는데, @DynamicUpdate Annotation을 사용하면, 변경된 필드만 업데이트 됨
Example
public void saveTest() {
final User EXPECTED_USER = TestInstanceFactory.getUser();
userRepository.save(EXPECTED_USER);
}
- save 메서드를 호출하면 Entity객체의 상태가 persistent 상태로 변경됨
- 영속성 컨텍스트에 의해 관리되며, 해당 객체의 모든 변경사항이 추적됨
- EXPECTED_USER 객체를 수정하면 영속성 컨텍스트에 해당 내용이 반영되며, 필요한 경우 해당 변경사항은 데이터베이스에 반영됨
댓글남기기