@Query("DELETE FROM Favorite f WHERE f.post.id = :postId")
다음 과 같이 JPARepository에 코드를 작성했을 때 다음과 같은 오류가 발생하였습니다.
org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [DELETE FROM...]
저는 이 문제를 해결하기 위해 다음과 같은 코드를 작성하였습니다.
@Transactional
public void deleteFavoritesByPostId(Long postId) {
Query query = em.createNativeQuery("DELETE FROM favorite
WHERE post_id = :postId");
query.setParameter("postId", postId);
query.executeUpdate();
}
오류는 해결되었지만, 구글에 에러의 해결법을 검색해보니
@Query어노테이션에 @Modifying 어노테이션을 추가해주면 오류를 해결할 수 있다고 하네요.
그럼 @Modifying은 어떻게 이걸 해결해주는 걸까요?
제가 처음에 작성한 쿼리는 DELETE를 한번에 해주는 쿼리였습니다. 네..벌크 연산 문제를 해결해주는 쿼리여서 해결이 되는 것이었습니다.
벌크 연산에 대해서는 다음에 자세히 작성해보겠습니다.