2017-04-19 1 views
-1

존재하지 않았다IllegalArgumentException가 그 이름 [이름]과 매개 변수 내가 내 코드에서이 쿼리를

return Long.parseLong(getEntityManager().createQuery(
"SELECT COUNT(a) FROM ApartmentExtraType a WHERE a.accommodation.id = :idacc AND (LOWER(a.name) LIKE :name)", 
Long.class) 
.setParameter("idacc", accommodation.getId()) 
.setParameter("name", "%" + filterQuery.getFieldFilter("name").toString().toLowerCase() + "%") 
getSingleResult().toString()); 

쿼리 내가 아무 문제가 모든 요소를 ​​찾을 수없는 경우,하지만에서 찾을 경우 적어도 하나의 요소 나는이 오류가 있습니다 :

Last cause: Parameter with that name [name] did not exist WicketMessage: Error attaching this container for rendering: 
[WebMarkupContainer [Component id = tbody]] 

상대 열의 이름은 "이름"입니다. 다른 쿼리는이 쿼리와 동일하며 제대로 작동합니다. 어떤 문제인지 모르겠다.

답변

0

"name"이라는 전달할 매개 변수와 함께 문제가 열 이름과 다른 것처럼 보입니다. "idacc"가 제대로 잡힌 것처럼 보입니다.

그래서이 부분은 잘 실행하는 경우 그

.setParameter("name", "ExampleName");

과 같이 작동 후 getFieldFilter 기능

에 문제가있는 경우

filterQuery.getFieldFilter("name").toString().toLowerCase()

이 문자열을 전달 시도하고 볼 작동하지 않습니다

+0

문제가 getFieldFilter 인 경우 제어되지만 syste.out이 올바른 문자열을 인쇄하기 때문에 그렇게 생각하지 않습니다. –

0

해결되었습니다. 문제는 쿼리가 사용자의 입력에 따라 다르며이 메서드 중 하나에서 변수가 잘못 인스턴스화 되었기 때문에 쿼리가 다른 메서드로 구성된다는 것입니다. 따라서 JVM은 [name] 매개 변수를 사용하여 쿼리의 일부를 찾지 못했습니다.

관련 문제