본문 바로가기
개발아닌개발/springboot

[오류] JPA를 이용하여 UPDATE @query 사용 시, No results were returned by the query

by 불청객 2021. 11. 8.
반응형

Spring Boot에서 postgre DB를 이용하여 사용자의 정보를 저장하고 있다.

그리고, 사용자 정보를 가져올때 등은 JPA를 상속받은 UserRepository.java 에서 각종 @Query가 구현되어 있다.

 

UPDATE 쿼리문을 호출하여 사용자의 정보를 수정하려고 하는데 UPDATE 자체는 정상적으로 동작하지만, 에러가 발생한다.

 

 

UserRepository.java

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long>{
.
.
}

 

RestAPI를 호출하여 UPDATE로 DB의 값을 변경한다.

@Query(value = "UPDATE [테이블명] SET [변경할 COLUMN명] = :state where [회원아이디COLUMN] =:userid", nativeQuery = true)
int setState(String userid, Long state);

 

 

 

 

 

근데 restapi 호출시, web에서는 500 ERROR가 springboot 콘솔에는 error가 잔뜩낀다.

500 error

 

: SQL Error: 0, SQLState: 02000 : No results were returned by the query. :&amp;amp;amp;nbsp;Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet] with root cause

 

 

 

 

update 쿼리가 반환하는 값이 없어서 뭐 문제라는데 

executeUpdate 를 사용해라, int로 해서 반환하게 만들라는 등의 해결책은 많았다. 

근데 내가 지금 적용하기엔 너무 .... 이해가안되고 뭔말인지 몰라서 

 

어노테이션 적용으로 해결함

 

 

 

 

 

 

 

 

해결 방안

  • @Transactional , @Modifying 어노테이션 적용하기 (import 포함)
  • 반환형은 int로 설정할것
@Transactional
@Modifying
@Query(value = "UPDATE [테이블명] SET [변경할 COLUMN명] = :state where [회원아이디COLUMN] =:userid", nativeQuery = true)
int setState(String userid, Long state);

 

더보기

import org.springframework.transaction.annotation.Transactional;

import org.springframework.data.jpa.repository.Modifying;

728x90
반응형

댓글