SPRING

VSCode에서 Spring boot JPA사용시 @Param 없이 사용법

cvcvcx9 2024. 10. 9. 11:26
반응형

스프링 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 는 이 이름들을 사용하여 네임드 쿼리의 파라미터를 참조할 수 있게 됨
반응형