인프런 커뮤니티 질문&답변

epfvkdlxj1님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

JPQL 에러 (For queries with named parameters you need to use provide names for method parameters)

21.07.15 18:20 작성

·

7.7K

0

안녕하세요. 영한님!
JPQL을

@Query
(
"SELECT user " +
"FROM FMSUser user " +
// " LEFT JOIN FETCH user.roles role " +
" JOIN FETCH user.company company " +
"WHERE user.email = :email"
)
  User fetchByEmailWithAuthorities(String email);

사용하다가 다음과 같은 (Request processing failed; nested exception is 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.; nested exception is java.lang.IllegalStateException)에러가 나왔는데 구글링을 하다보니 
자바 8버전 밑으로는 명시적으로 @Param()을 사용하라고 되어있었고, 8버전 또는 그 위에 버전은 "Preferences(Command + ,) > Build, Execution, Deployment > Compiler > Java Compiler" 에서 Additional command line parameters 부분에 -parameters 이렇게 넣어주면 해결된다고 되어있다고 설명이 되어있는데.. 결론은 해결이 되지 않더라구요.

저는 지금 자바11버전을 쓰고 있는데 혹시 다른 해결방법이 있을까요?

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

2021. 07. 15. 22:52

안녕하세요. epfvkdlxj1님

파라미터에 스프링 데이터가 제공하는 @Param("email") String email 을 넣어주셔야 합니다^^!

감사합니다.

epfvkdlxj1님의 프로필 이미지
epfvkdlxj1
질문자

2021. 07. 16. 00:26

자바 버전이 8버전 이상이어도 명시해야하는건가요?? 다름이 아니라 8버전 밑으로는 명시해야 한다는 글귀를 본거 같아서 여쭤봅니다!

@Query
(
"SELECT user " +
"FROM FMSUser user " +
// " LEFT JOIN FETCH user.roles role " +
" JOIN FETCH user.company company " +
"WHERE user.email = :email"
)
  User fetchByEmailWithAuthorities(@Param("email")String email);

이렇게 수정을 해야한다는 말씀이신건가요??

김영한님의 프로필 이미지
김영한
지식공유자

2021. 07. 16. 20:40

네 맞습니다^^