[Error] Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.

후,,,,spring data JPA를 사용해서 interface 파라미터를 사용한 @Query문 작성 도중 도저히 알 수 없는 에러를 만났습니다.

바로!!!제목과 같은 에러인데요. 먼저 Repository를 보시면

public interface OperationRepository extends JpaRepository<Operation, Long> {

    @Query("SELECT o FROM Operation o WHERE o.link=:link")
    public Optional<Operation> findByLink(String link);

    @Query("SELECT o FROM Operation o WHERE o.id=:id AND o.link=:link")
    public Optional<Operation> findByIdAAndLink(Long id,String link);
}

위와 같이 인터페이스 파라미터에 어떠한 어노테이션도 붙지 않았습니다.
바로 여기서 에러가 발생한 원인이었는데요, @Param 어노테이션을 붙여주지 않았기 때문입니다.

처음에는 이에 대해 에러가 발생하지 않다가 나중에 갑자기 발생했는데 아마 gradle 파일에서 설정을 해주다가 -parameters 옵션을 포함한 부분이 들어있다가 수정하면서 빠진게 아니었나 싶습니다.

public interface OperationRepository extends JpaRepository<Operation, Long> {

    @Query("SELECT o FROM Operation o WHERE o.link=:link")
    public Optional<Operation> findByLink(@Param("link") String link);

    @Query("SELECT o FROM Operation o WHERE o.id=:id AND o.link=:link")
    public Optional<Operation> findByIdAAndLink(@Param("id") Long id,@Param("link") String link);
}

자바 8버전 이상이라고 하더라도 @Query 어노테이션을 사용하여 쿼리문을 작성해 줄때 파라미터 바인딩을 위해 @Param 어노테이션을 사용해주도록 합시다!!!!

더 자세한 내용은 https://www.inflearn.com/questions/367372 를 참고해주시면 되겠습니다.

좋은 웹페이지 즐겨찾기