JPQL @Query 에러: For queries with named parameters you need to use provide names for method parameters

NCOOKIE·2024년 6월 5일
0

문제 (1)

몇 주 동안 건들지 않았던 스프링 프로젝트를 다시 손대고 있었는데 이 에러가 발생했다. 코드 상으로는 변경된 부분이 없는데 게시글을 추가 요청할 때마다 문제가 생겼다.

원인 (2)

JPA에서 JPQL을 @Query 어노테이션과 함께 사용할 때, 쿼리 구문 안에서 메소드의 파라미터를 사용하려면 앞에 @Param 어노테이션을 붙어야 한다.

예시

@Query("SELECT COUNT(*) FROM ReviewLike WHERE review = :review AND likeStatus = 1")
int countLikeByReview(@Param("review") Review review);

JPA Repository 클래스의 코드를 보니 @Param 어노테이션을 사용하지 않는 메소드들이 몇 개 있었다. 그렇다면 왜 그 전에는 문제가 없었을까?

이 프로젝트에서 잠깐 손을 놨을 때 IntelliJ 설정 파일을 삭제했었는데, 아마 예전에 내가 javac flag -parameters를 설정했던 것이 날라가서 에러가 발생한 것으로 보인다.

이 설정은 IntelliJ 기준 Settings - Build, Execution, Deployment > Compiler > Java Compiler에서 Additional command line parameters 부분에 -parameters를 입력해주면 된다.

문제 (2)

위의 두 가지 방법을 모두 적용했음에도 여전히 에러가 발생했다. 비슷한 경우를 찾아봐도 잘 나오지 않았다.

해결 방법은 생각보다 간단했다. 프로젝트를 Rebuild 하는 것이다. 아마 코드에서 수정한 내역이 적용이 제대로 되지 않았던 것 같다... 그러나 좋은 방법은 아닌 것 같다. 지금이야 데이터도 별로 없고 리스크가 적으니 상관없지만 실제 서비스 운용 단계에서는 다른 방법을 찾아야 할 것이다.

해결

  1. JPQL 쿼리 구문에서 사용할 메소드 파라미터 앞에 @Param 어노테이션 붙이기
  2. Java8 이상부터는 javac flag -parameters 설정하기
  3. 프로젝트 리빌드 또는 테이블 삭제 후 재생성하기 (추천하지 않음)

참고

profile
일단 해보자

0개의 댓글

관련 채용 정보