❓@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 메서드를 조회 쿼리로 간주하고 트랜잭션을 관리하지 않을 것이다.
- 따라서 업데이트가 발생할 때, 트랜잭션 관리 및 데이터베이스 변경 사항 플러싱을 수동으로 해줘야 한다.
'TIL' 카테고리의 다른 글
[TIL][Spring] javax.xml.bind.DatatypeConverter 에러 (0) | 2023.12.21 |
---|---|
[TIL][SQL] 연관 데이터 없을 때 조회하기 (Join vs Left Join) (0) | 2023.11.08 |
JPA 에서 복합키 사용하기 (0) | 2023.08.06 |
[TIL][ContentProject] h2-console 403 error (0) | 2023.07.27 |
[TIL][ContentProject] H2 DB 에서 User Table 사용하기 (0) | 2023.07.19 |