[JPQL][Error] For queries with named parameters you need to use provide names for method parameters

희원·2022년 3월 3일
0

에러 메시지

org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.;

원인

파라미터가 있는 update, delete 등의 query의 경우, 메서드의 매개변수에 대한 name을 제공해주어야 한다.

// 수정 전
@Modifying(clearAutomatically = true)
@Query(value = "update review r set r.score = :score, r.content = :content, 
		r.updated_at = :updated_at where r.id = :id", nativeQuery = true)
  int update(Long id, int score, String content, LocalDateTime updated_at);

해결

  • Java 8버전 이후부터는 "Preferences(Command + ,) > Build, Execution, Deployment > Compiler > Java Compiler" 에서 Additional command line parameters 부분에 -parameters 를 적어주면 해결된다.

  • Java 8버전 밑이거나 첫번째 방법으로 해결되지 않는 경우, @Param() 어노테이션을 사용하여 명시적으로 name 지정을 해준다.

// 수정 후
@Modifying(clearAutomatically = true)
@Query(value = "update review r set r.score = :score, r.content = :content, 
		r.updated_at = :updated_at where r.id = :id", nativeQuery = true)
  int update(@Param("id") Long id, @Param("score") int score, @Param("content") String content, @Param("updated_at")LocalDateTime updated_at);

참고

profile
모든 시작은 사소함으로부터

0개의 댓글