21.09.02 16:11 작성
·
478
0
안녕하세요! 선생님 강의를 여러개 듣고 나서 개인 프로젝트를 하다가 로그인 & crud 정도만 조금 구현 해놓고 Querydsl을 듣고 있었습니다. 강의에서 5:34 에 나오는 Build and run using을 Gradle -> IntelliJ IDEA로 바꾸는 과정을 보면서 제 개인 프로젝트에 적용을 하지 않은것을 깨달아 그것을 변경하였는데 로그인 과정에서 전에 발생하지 않던 아래의 에러가 나는겁니다.
Caused by: 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.;
구글링을 통해서 아래와 같이 레포지토리에 있는 jpql 메소드의 파라미터에 @Param을 추가해서 에러는 해결했습니다.
여기서 궁금한것은 왜 Gradle 에서 IntelliJ IDEA로 바꿨다해서 에러가 났을까? 입니다. 감사합니다
답변 1
1
2021. 09. 02. 21:57
안녕하세요. 이호석님
파라미터인 String user_id라는 변수 이름은 컴파일 시점에 String x01 처럼 주소 값 같은 것으로 취환되어 버립니다. 따라서 @Query에서 :user_id를 찾을 수 없게 됩니다.
이것을 가능하게 하려면 오류 메시지에 나온 것 처럼 컴파일 시점에 어떤 옵션을 주어야 합니다. 그러면 변수 이름이 그대로 남아겠게 됩니다.
그런데 이게 자바 환경에 따라서 옵션을 주어야 하는 경우도 있고 주지 않아도 되는 경우도 있는 것으로 압니다.
Gradle을 통해서 실행할 때와 아닐때가 자바 또는 자바를 실행하는 환경이 약간 다를 것으로 예상됩니다.
그래서 꼭 @Param을 사용해주세요.
감사합니다.