Spring Data JPA를 사용해 Soft Delete를 구현하던 중 제목과 같은 오류가 발생했다.
@Query("UPDATE User u SET u.deletedAt = :deletedAt, u.deletedBy = :deletedBy, u.isDeleted = true " +
"WHERE u.userId = :userId")
void deleteById(@Param("userId") Long userId, @Param("deletedAt") LocalDateTime deletedAt,
@Param("deletedBy") Long deletedBy); // userId : 삭제될 유저, DeleteBy : 삭제하는 유저
로그의 내용과 같이 @Query 어노테이션을 사용할 경우 SELECT문에만 사용할 수 있다. 그렇다면 나머지 C, U, D 연산은 어떻게 해야할까?
아래와 같이 @Modifying 어노테이션을 붙여 수정 쿼리를 사용할 수 있다.
@Modifying
@Query("UPDATE User u SET u.deletedAt = :deletedAt, u.deletedBy = :deletedBy, u.isDeleted = true " +
"WHERE u.userId = :userId")
void deleteById(@Param("userId") Long userId, @Param("deletedAt") LocalDateTime deletedAt,
@Param("deletedBy") Long deletedBy); // userId : 삭제될 유저, DeleteBy : 삭제하는 유저