@Modifying이란?

Spring Data JPA에서 @Query를 사용할 때 데이터 변경(UPDATE, DELETE)을 수행하도록 지정하는 어노테이션이다.

Artifact

@Modifying을 사용하려면 Spring Data JPA 의존성을 추가해야 한다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

역할

  • Spring Data JPA에서 @Query를 사용한 UPDATE 및 DELETE 실행 가능
  • 변경된 데이터를 반영하기 위해 @Transactional과 함께 사용
  • 자동으로 플러시(flush)를 수행하여 변경 사항을 DB에 적용

사용법

1️⃣ @Modifying 적용 예제

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

public interface UserRepository extends JpaRepository<User, Long> {

    @Modifying
    @Transactional
    @Query("UPDATE User u SET u.status = 'INACTIVE' WHERE u.id = :id")
    int deactivateUser(Long id);
}

2️⃣ @Transactional과 함께 사용해야 하는 이유

  • @Modifying을 사용할 때는 트랜잭션을 관리하기 위해 @Transactional이 필요
  • 데이터 변경 작업이므로 자동으로 flush가 수행됨
  • clearAutomatically = true 옵션을 사용하면 자동으로 영속성 컨텍스트를 초기화하여 최신 데이터 유지 가능
@Modifying(clearAutomatically = true)
@Query("DELETE FROM User u WHERE u.status = 'INACTIVE'")
void deleteInactiveUsers();

연결문서

댓글남기기