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);