-
Spring boot. JPA Expecting a SELECT query개발 기록 2023. 9. 20. 14:45728x90
JPA를 사용해 delete 쿼리를 날리던중 "Expecting a SELECT query" 라는 오류 메세지가 등장했다.
@Query("delete from AbcKeyword ak " + "where ak.profile.id = :id ") void deleteAllByProfileId(UUID id);
JPA는 delete를 수행하기 전에 select를 날리기 때문이다.
디버깅 모드로 끊어서 보면 repostory의 delete를 실행하는 시점에서는 실제로 select가 실행되고 select 결과에 따라서 트랜젝션이 끝날때 delete를 실행한다.
@Transactional // 2. delete 실행 public void deleteAbc(...){ abcRepository.delete~~(id); // 1. select 실행 }
해결 방법은 간단히 @Modifying을 붙여주면 된다.
@Modifying // 추가 @Query("delete from AbcKeyword ak " + "where ak.profile.id = :id ") void deleteAllByProfileId(UUID id);
select 없이 delete가 실행될것이다.
JPA 공식문서
- insert, update, delete, DDL statements는 @Modifying를 붙여주세요.
Queries that require a `@Modifying` annotation include INSERT, UPDATE, DELETE, and DDL statements.
------------------------------------
참고
728x90반응형'개발 기록' 카테고리의 다른 글
MariaDB. ST_Distance_Sphere does not exist. Let's create! (0) 2024.04.04 Nextjs 14. how to add unsupported metadata (0) 2024.01.12 Spring Boot. How to get custom header value using @RequestHeader (0) 2023.08.31 Spring Boot. GoogleIdTokenVerifier's parameters(HttpTransport, JsonFactory) : How to know that? (0) 2023.08.10 Spring Boot. @PathVariable with a dot(.) gets truncated (0) 2023.07.03