Spring
Spring - JPA @Modifying return value
codeManager
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 반환 값은 데이터베이스에서 업데이트된 행의 개수입니다.
반응형