에러 -org.springframework.dao.InvalidDataAccessApiUsageException: Query executed via 'getResultList()' or 'getSingleResult()' must be a 'select' query

박상훈·2024년 8월 27일

에러 로그

목록 보기
10/13

상황

Spring Data JPA를 사용해 Soft Delete를 구현하던 중 제목과 같은 오류가 발생했다.

  • 아래와 같이 @Query를 사용하여 UPDATE문을 사용하였다.
@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 : 삭제하는 유저
profile
안녕하세요

0개의 댓글