더티 체킹 (Dirty Checking)
JPA의 더티 체킹(Dirty Checking)이란 엔티티 객체의 변경 사항을 자동으로 감지하여 변경된 데이터만 DB에 반영하는 기능을 말합니다.
이 덕분에 개발자가 update SQL을 직접 작성하지 않아도 JPA가 자동으로 변경을 감지하고 업데이트를 수행합니다.
Spring Data JPA .save() 방식
@Transactional
public void modifyClassInfo(Long classId, ClassRequest.ModifyRequestData requestData) {
ClassEntity classEntity = classRepository.findById(classId).get();
// 엔티티 수정
classEntity.setName(requestData.getName());
classEntity.setDescription(requestData.getDescription());
// DB에 저장
classRepository.save(classEntity);
// 실행되는 SQL문:
// UPDATE class SET
// name = ?,
// description = ?,
// favorite = ?, <- 변경하지 않은 필드도 UPDATE
// master_id = ?, <- 변경하지 않은 필드도 UPDATE
// created_at = ? <- 변경하지 않은 필드도 UPDATE
// WHERE id = ?
}
- save(): 모든 필드를 UPDATE
JPA 더티체킹 방식
@Transactional
public void modifyClassInfo(Long classId, ClassRequest.ModifyRequestData requestData) {
ClassEntity classEntity = classRepository.findById(classId).get();
// 엔티티 수정만 하면 됨
classEntity.updateInfo(requestData.getName(), requestData.getDescription());
// 실행되는 SQL문:
// UPDATE class SET
// name = ?,
// description = ? <- 변경된 필드만 UPDATE
// WHERE id = ?
}
- 더티 체킹 : 변경된 필드만 UPDATE
- save()를 깜빡 잊어도 트랜잭션 종료 시점에 모든 변경사항이 자동으로 DB에 반영됨
출처
OpenAI의 ChatGPT
'DB > JPA' 카테고리의 다른 글
| [JPA] ddl-auto를 썼는데 컬럼이 삭제되지 않는 이유 (1) | 2025.04.12 |
|---|---|
| [JPA] 기본키 생성 전략 (추가설명) (업데이트중...) (0) | 2025.03.12 |
| [JPA] 기본키 생성 전략 (0) | 2025.03.03 |
| [JPA] BaseEntity (0) | 2025.02.28 |
| [JPA] Enity Annotation (1) | 2024.12.19 |