백엔드/Spring

[JPA] but parameter 'Optional[xx]' not found in annotated query.

YoungBLUE 개발일지 2023. 5. 11. 22:04

JPA의 Repository를 사용하다보면 쿼리를 작성할 때 어노테이션 쿼리를 사용하기도 하고 네임쿼리를 사용하기도 한다.

그런데 이때 변수를 전달해서 동적인 쿼리를 작성하곤 하는데 제목과 같이 not found in annotated query. 라는 오류를 뱉을 때가 있다.

이 경우 아주 간단한 문제이므로 잘 확인 해보길 바란다.

 

예를 들어, 생성일자를 변수로 쿼리에 전달한다고 할 때 다음과 같은 쿼리가 있다고 치자.

... and a.createdDateTime <: dateFrom and a.status = :status...

 

혹시 이상한 점을 찾았는가?

 

빌드를 하려는데 자꾸 제목과 같은 오류가 났다.

but parameter 'Optional[dateFrom]' not found in annotated query.

아니! (한국인 특. 아니로 시작함)
분명 dateFrom 있잖아! 왜 못찾는건데?

알고보니 바보였다.

 

Annotated Query 어노테이션 쿼리에서는 변수를 전달할 때

: 다음에 변수를 붙여서 써야 한다.

:dateFrom

:status

 

그런데 나는 : 뒤에 공백이 있었고 이 때문에 dateFrom 변수를 인식하지 못한 것이었다.

 

... a.createdDateTime < :dateFrom and status = :status...

로 수정 했더니 해결 되었다!

반응형