반응형
스프링 Data JPA 에서 네임드 쿼리를 사용할때 @Param 을 사용하지 않고 사용하는 방법
에러 본문
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.
원인
- 스프링 데이터 JPA 에서 네임드 쿼리를 사용할때 @Param 을 사용하지 않고 사용하면 위와 같은 에러가 발생한다.
- 인텔리제이에서 실행할 때는 문제가 없지만 VSCode에서 설정없이 스프링 부트를 실행하면 위와 같은 에러가 발생한다.
해결 방법
- gradle.build 파일에 아래 코드를 추가한다.
compileJava { options.compilerArgs << '-parameters' }
- 위 코드를 추가하면 스프링 부트를 실행할 때 위와 같은 에러가 발생하지 않는다.
왜 -parameters 옵션을 추가하면 되는가?
- JPA 쿼리에서 named parameter를 사용할 때, 이 파라미터들을 메서드의 인자와 연결해야함
- parameters 컴파일러 옵션은, 메서드 파라미터 이름을 클래스 파일에 포함시켜서 빌드하게 됨
- 컴파일(빌드) 과정에서 메서드 파라미터 이름을 포함하게 되면, 런타임에 이 이름들을 사용할 수 있게 됨
- 따라서, 스프링 데이터 JPA 는 이 이름들을 사용하여 네임드 쿼리의 파라미터를 참조할 수 있게 됨
반응형
'SPRING' 카테고리의 다른 글
@ModelAttribute 기본값 설정하기 (0) | 2023.04.02 |
---|---|
프로젝트 작성시 순서 정리 (0) | 2023.04.02 |