1. 문제 원인
해당 오류는 DB insert, update, delete 쿼리문을 작성할 경우 정상적으로 동작하지만 발생하는 오류이다.
쿼리에 대한 반환값이 없다는 내용이다.
( 오류 발생 쿼리문 )
@Repository
public interface CommentRepository extends JpaRepository<CommentEntity, String> {
@Query(value = "insert into comment \n" +
"(board_id, PARENT_COMMENT_ID, COMMENT_ID, content, user_id)\n" +
"values\n" +
"(:#{#dto.board_id}, (select count(parent_comment_id) from \n" +
"(select parent_comment_id from comment where board_id=:#{#dto.board_id} group by parent_comment_id) A\n" +
"), 0, :#{#dto.content},:#{#dto.user_id})"
,nativeQuery = true)
int insert(@Param(value = "dto") CommentDTO dto);
}
- Select는 이상 없이 동작하지만 DML 쿼리 작성 시 발생한다
2. 해결 방법
@Transactional , @Modifying 적용하고 반환형은 int로 설정한다.
@Modifying
INSERT, UPDATE, DELETE(SELECT 제외) 쿼리에서 사용되는 어노테이션으로 업데이트 쿼리임을 선언한다.
@Transactional
작업 중에 하나라도 실패할 경우 전체 작업을 취소해주는 트랜잭션 처리를 해준다.
(오류 수정 쿼리)
@Repository
public interface CommentRepository extends JpaRepository<CommentEntity, String> {
@Transactional
@Modifying
@Query(value = "insert into comment \n" +
"(board_id, PARENT_COMMENT_ID, COMMENT_ID, content, user_id)\n" +
"values\n" +
"(:#{#dto.board_id}, (select count(parent_comment_id) from \n" +
"(select parent_comment_id from comment where board_id=:#{#dto.board_id} group by parent_comment_id) A\n" +
"), 0, :#{#dto.content},:#{#dto.user_id})"
,nativeQuery = true)
int insert(@Param(value = "dto") CommentDTO dto);
}
반응형