[SQL] 어떻게 JPA 명명 된 쿼리의 IN 절에서 동적 매개 변수를 사용하는 방법?
SQL어떻게 JPA 명명 된 쿼리의 IN 절에서 동적 매개 변수를 사용하는 방법?
내 문제는 이런 종류의 질의에 관한 것입니다 :
select * from SOMETABLE where SOMEFIELD in ('STRING1','STRING2');
이전 코드는 SQL 개발자 내에서 잘 작동합니다. 같은 정적 쿼리도 잘 돌아갑니다 나에게 몇 가지 결과를 작동합니다
Query nativeQuery = em.createNativeQuery(thePreviousQuery,new someResultSet());
return nativeQuery.getResultList();
나는이를 매개 변수화 할 때, 나는 문제가 발생합니다.
final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in (?selectedValues)";
Query nativeQuery = em.createNativeQuery(parameterizedQuery ,new someResultSet());
nativeQuery.setParameter("selectedValues","'STRING1','STRING2'");
return nativeQuery.getResultList();
나는 어떤 결과 (그러나 콘솔에 오류가) 없어. 내가 로그에서 볼 때, 나는 그런 일을 참조하십시오
select * from SOMETABLE where SOMEFIELD in (?)
bind => [STRING1,STRING2]
이러한 오류, 리드 : (selectedValues) 나는 또한 더 (유사한 결과) 따옴표, 또는 비 정렬 매개 변수를 사용하지하려고 :
SQL Error: Missing IN or OUT parameter at index:: 1
나는 enventually 대신 쿼리의 매개 변수에 직접 설정 한 괄호를했다려고했는데,이 중 하나가 작동하지 않았다 ...
내가 처음 (작업)의 경우에 맞게, 런타임시 내 쿼리를 만들 수 있지만 오히려 그것을 적절한 방법을 할 것; 누구든지 아이디어가있는 경우 따라서, 나는 큰 관심을 읽을 수 있습니다!
참고 : JPA 버전 1.0 오라클 11G
해결법
-
==============================
1.JPA는하지 네이티브 쿼리 만 JPQL 쿼리의 목록 문자를 매개 변수로 컬렉션의 사용을 지원합니다. 일부 JPA 제공 업체는 독점적 인 기능으로이를 지원하지만 (https://stackoverflow.com/a/3145275/1285097 참조) JPA 사양의 일부가 아니다.
JPA는하지 네이티브 쿼리 만 JPQL 쿼리의 목록 문자를 매개 변수로 컬렉션의 사용을 지원합니다. 일부 JPA 제공 업체는 독점적 인 기능으로이를 지원하지만 (https://stackoverflow.com/a/3145275/1285097 참조) JPA 사양의 일부가 아니다.
기본 쿼리에 명명 된 매개 변수도 JPA 사양의 일부가 아닙니다. 그들의 동작은 지속성 공급자 및 / 또는 JDBC 드라이버에 따라 달라집니다.
오라클은 이러한 기능을 모두 지원하기위한 JDBC 드라이버를 사용하여 최대 절전 모드.
List<String> selectedValues = Arrays.asList("STRING1", "STRING2"); final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in (:selectedValues)"; return em.createNativeQuery(parameterizedQuery) .setParameter("selectedValues", selectedValues) .getResultList();
-
==============================
2.대신에:
대신에:
nativeQuery.setParameter("selectedValues", params);
내가 사용했다 :
nativeQuery.setParameterList("selectedValues", params);
-
==============================
3.이 교체 :
이 교체 :
nativeQuery.setParameter("selectedValues","'STRING1','STRING2'");
와
List<String> params; nativeQuery.setParameter("selectedValues",params);
-
==============================
4.이 더비에서 날 위해 일했습니다. 없는 매개 변수 "()".
이 더비에서 날 위해 일했습니다. 없는 매개 변수 "()".
List<String> selectedValues = Arrays.asList("STRING1", "STRING2"); final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in :selectedValues"; return em.createNativeQuery(parameterizedQuery) .setParameter("selectedValues", selectedValues) .getResultList();
-
==============================
5.나는 또한 같은 문제에 직면했다. 이것은 내가 한 것입니다 :
나는 또한 같은 문제에 직면했다. 이것은 내가 한 것입니다 :
List<String> sample = new ArrayList<String>(); sample.add("sample1"); sample.add("sample2");
그리고 지금 당신은 PARAMS에서 샘플을 설정할 수 있습니다.
from https://stackoverflow.com/questions/21484176/how-to-use-a-dynamic-parameter-in-a-in-clause-of-a-jpa-named-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 열 및 업데이트 테이블의 값을 정렬하려면? (0) | 2020.06.09 |
---|---|
[SQL] MySQL의 GROUP BY 날짜 시간 +/- 삼초 (0) | 2020.06.09 |
[SQL] SQL 서버는 웹 요청을 보낼 수 있습니까? (0) | 2020.06.09 |
[SQL] MS SQL Server에 RODBC 임시 테이블 문제를 연결할 때 (0) | 2020.06.09 |
[SQL] 어떻게 MAX (날짜)에 의해 선택하는 방법? (0) | 2020.06.09 |