Backend/🌿 Spring

[JPA] Can not issue data manipulation statements with executeQuery().

Hugehoo 2022. 12. 8. 23:34

에러 메시지: Caused by: java.sql.SQLException: Can not issue data manipulation statements with executeQuery().


원인: @Modifying(clearAutomatically = true) 미사용


`update, delete, insert` 쿼리는 리턴값을 갖지 않기 때문에 발생하는 에러. 
Jpa 에서 `select Query` 를 보낼 땐 `executeQuery()` 를 사용하지만, `update, delete, insert` 등의 쿼리를 보낼 땐, executeUpdate() 쿼리를 사용한다. executeUpdate() 는 쿼리를 전송해서 변경된 행의 개수를 리턴한다.


JPA 쿼리 메서드 사용시, @Modifying 어노테이션을 붙이지 않으면 결과값 응답을 기대하는 executeQuery() 함수를 사용한다. 따라서 `update, delete, insert` 트랜잭션을 JPA 에서 사용하려면 executeUpdate() 함수를 사용하도록 @Modifying 어노테이션을 붙여야 한다.

 

위의 이미지에선 @Modifying 어노테이션이 주석처리 됐기 때문에 에러가 발생한다. 해당 어노테이션을 주석 해제하면 executeSelect() 대신 executeUpdate() 메서드가 실행된다.

 

 

Todo : JPA 내부에서 executeSelect(), executeUpdate() 메서드가 어떤 원리로 동작하는지 확인 필요.