-
Spring - JPA @Modifying return valueSpring 2024. 3. 25. 22:40반응형
JPA에서 @Modifying 어노테이션 사용 시 주의할 점에 대해서 알아보겠습니다.
@Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; private String email; private boolean active; }
JPA에서 @Query 어노테이션은 특정 JPQL 또는 SQL 쿼리를 작성할 수 있는 기회를 제공합니다.
@Modifying 어노테이션은 @Query 어노테이션을 향상시켜 SELECT 쿼리뿐만 아니라 INSERT, UPDATE, DELETE, 심지어 DDL 쿼리까지 실행할 수 있습니다.
@Repository public interface UserRepository extends JpaRepository<User, Integer> { @Modifying @Query("delete user where active = false") long deleteDeactitveUsers(); }
@Modifying 쿼리에서 return value를 long으로 하면 다음과 같은 에러가 발생합니다.
Caused by: java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!
@Modifying 쿼리를 사용할 때는 void나 int/Integer 타입만 return type으로 사용할 수 있습니다.
쿼리를 이렇게 바꿔주면 정상 동작합니다.
@Modifying @Query("delete user where active = false") int deleteDeactitveUsers();
이때 int/Integer 반환 값은 데이터베이스에서 업데이트된 행의 개수입니다.
반응형'Spring' 카테고리의 다른 글
Spring - JPA findBy findAllBy 차이점 (0) 2024.03.27 Spring - JPA InvalidDataAccessApiUsageException (0) 2024.03.25 Spring - JPA distinct 여러 컬럼 사용하기 (0) 2024.03.12 Spring - JPA on duplicate key update (MySQL) (0) 2024.02.13 Spring - JPA Entity에서 @Column 필드 리스트로 만들기 (0) 2024.02.13