본문 바로가기

Project

JPA ) 더티체킹의 대한 궁금증 & 나의 사용방식

더티체킹 (Dirty Checking)이란?

  • 영속성 컨텍스트가 관리하는 엔티티의 상태가 변경되었을 때, Transaction에 끝나는 시점에 DB에 적용하는 기능

 

영속성 컨텍스트란?

  • 엔티티 객체들을 관리하는 일종의 가상 공간
  • 트랜잭션 시작 시, 영속성 컨텍스트 활성화. 트랜잭션 종료 시 영속성 컨텍스트가 종료.

 

예시

이전 코드

@Transactional
public void updateEntity(Long id) {
    // 1. 엔티티 조회
    MyEntity entity = entityManager.find(id);

    // 2. 필드 값 변경
    entity.setName("Updated Name");

    // 3. 변경된 entity 저장
    entityManager.save(entity);
}

 

수정 코드

@Transactional
public void updateEntity(Long id) {
    // 1. 엔티티 조회
    MyEntity entity = entityManager.find(id);

    // 2. 필드 값 변경
    entity.setName("Updated Name");

    // 3. 메서드가 끝나면서 트랜잭션이 종료됨
    // 영속성 컨텍스트가 변경 사항을 감지하고 UPDATE 쿼리를 실행
}

 

실행 과정

 

  • 조회( find )한 엔티티는 영속성 컨텍스트에 저장.
  • 값을 변경( setName )하면, JPA가 변경 감지를 통해 변경된 상태를 기록.
  • 메서드가 끝나면서 트랜잭션 종료 → flush 호출 → UPDATE 쿼리 실행

 

내가 사용했던 방법

@Transactional을 사용해서 Update작업 시 사용