TIL

[TIL][SQL] @Modifying 어노테이션

dbssk 2023. 11. 8. 12:58

❓@Modifying 어노테이션이란?

@Modifying(clearAutomatically = true, flushAutomatically = true)
@Transactional
@Query("UPDATE Restaurant r SET r.averageRating = :averageRating WHERE r.id = :restaurantId")
void updateAverageRating(@Param("restaurantId") Long restaurantId, @Param("averageRating") double averageRating);
  • 수정 쿼리를 수행하는 메서드에 붙인다.
  • JPA에서 SLECT 쿼리가 아닌 UPDATE, DELETE, INSERT 등과 같은 수정 작업을 수행하는 메서드에 대한 표시
  • clearAutomatically : 수정 쿼리 실행 후 영속성 컨텍스트를 자동으로 초기화하여 변경된 엔티티에 대한 변경사항을 DB에서 가져오도록 한다.
  • flushAutomatically : 쿼리 실행 전에 영속성 컨텍스트를 flush하여 변경 사항을 DB에 동기화한다.

 

💡if @Modifying을 사용하지 않는다면?

  • Spring Data JPA는 updateAverageRating 메서드를 조회 쿼리로 간주하고 트랜잭션을 관리하지 않을 것이다.
  • 따라서 업데이트가 발생할 때, 트랜잭션 관리 및 데이터베이스 변경 사항 플러싱을 수동으로 해줘야 한다.