@Modifying
🛠 @Modifying
정의
@Modifying은 Spring Data JPA에서@Query로 UPDATE, DELETE 같은 변경 쿼리를 실행하도록 지정하는 애너테이션이다.
조회용 JPQL과 달리, 변경 쿼리는 별도 처리 표시가 필요하다.
🧩 Artifact
@Modifying을 사용하려면 Spring Data JPA 의존성이 필요하다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
🔧 역할
@Query를 사용한 UPDATE, DELETE 실행을 가능하게 한다.- 변경 작업이므로
@Transactional과 함께 사용하는 경우가 많다. - 필요에 따라
flushAutomatically,clearAutomatically옵션을 사용할 수 있다.
🧪 사용법
@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);
}
@Transactional과 함께 사용하는 이유
- 변경 쿼리는 트랜잭션 안에서 실행하는 것이 자연스럽다.
@Modifying만으로는 변경 작업의 일관성을 보장하기 어렵다.clearAutomatically = true를 사용하면 영속성 컨텍스트를 초기화할 수 있다.
@Modifying(clearAutomatically = true)
@Query("DELETE FROM User u WHERE u.status = 'INACTIVE'")
void deleteInactiveUsers();
⚠️ 주의사항
- 조회 쿼리에는 사용하지 않는다.
- 변경 쿼리는 영속성 컨텍스트와 DB 상태가 달라질 수 있으므로 주의해야 한다.
- 필요하면
flushAutomatically와clearAutomatically옵션을 함께 검토한다.
📌 정리
@Modifying은 JPA 변경 쿼리를 실행할 때 사용하는 애너테이션이다.@Query와 함께 UPDATE, DELETE를 수행할 수 있다.- 트랜잭션과 영속성 컨텍스트 관리가 중요하다.
댓글남기기