오류 해결

[Spring Data JPA / 오류] @query사용시 No results were returned by the query 오류 해결 방법

cob 2023. 3. 10. 00:10

 

 

 

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);
}
반응형