몇 주 동안 건들지 않았던 스프링 프로젝트를 다시 손대고 있었는데 이 에러가 발생했다. 코드 상으로는 변경된 부분이 없는데 게시글을 추가 요청할 때마다 문제가 생겼다.
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
를 입력해주면 된다.
위의 두 가지 방법을 모두 적용했음에도 여전히 에러가 발생했다. 비슷한 경우를 찾아봐도 잘 나오지 않았다.
해결 방법은 생각보다 간단했다. 프로젝트를 Rebuild 하는 것이다. 아마 코드에서 수정한 내역이 적용이 제대로 되지 않았던 것 같다... 그러나 좋은 방법은 아닌 것 같다. 지금이야 데이터도 별로 없고 리스크가 적으니 상관없지만 실제 서비스 운용 단계에서는 다른 방법을 찾아야 할 것이다.
@Param
어노테이션 붙이기javac flag -parameters
설정하기