정의

@DynamicUpdateHibernate에서 엔티티 변경 시 변경된 필드만 UPDATE 하도록 만드는 애너테이션이다.

JPA에서 엔티티가 수정될 때 기본적으로는 전체 필드를 갱신할 수 있는데, @DynamicUpdate를 사용하면 실제로 변경된 컬럼만 SQL에 포함된다.

🧩 Artifact

  • @DynamicUpdate는 Hibernate 기반 JPA 환경에서 동작한다.
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.hibernate:hibernate-core:5.6.9.Final'
}

🛠 역할

  • 변경된 필드만 UPDATE 하도록 최적화한다.
  • 불필요한 업데이트 SQL을 줄인다.
  • Hibernate의 Dirty Checking과 함께 사용된다.

🧪 사용법

@DynamicUpdate 적용 예시

import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*;

@Entity
@DynamicUpdate
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;
}

기본 JPA 업데이트와 비교

방식 설명 실행되는 SQL
기본 JPA 업데이트 변경되지 않은 필드도 함께 업데이트될 수 있다. UPDATE user SET name=?, email=? WHERE id=?
@DynamicUpdate 사용 변경된 필드만 업데이트한다. UPDATE user SET email=? WHERE id=?

📌 장점과 단점

장점

  • 변경된 필드만 업데이트하여 불필요한 SQL을 줄인다
  • 트랜잭션 내에서 업데이트 범위를 줄일 수 있다

단점

  • 업데이트 SQL이 동적으로 바뀌어 캐시 효율이 떨어질 수 있다
  • Hibernate 의존 기능이라 JPA 표준은 아니다

⚠️ 주의사항

  • 모든 상황에서 무조건 유리한 것은 아니다.
  • 변경 컬럼이 많지 않더라도 동적 SQL 생성 비용이 생길 수 있다.
  • 성능 최적화가 필요한 경우에만 사용하는 편이 좋다.

📌 정리

  • @DynamicUpdate는 변경된 필드만 UPDATE 하도록 하는 Hibernate 애너테이션이다.
  • Dirty Checking과 함께 쓰면 불필요한 SQL을 줄이는 데 도움이 된다.
  • JPA 표준이 아니므로 사용 목적을 분명히 해야 한다.

연결문서

댓글남기기