2017-03-16 1 views
0

, 자바 코드에서위치 매개 변수를 사용하여 원시 쿼리에 'NOT IN'절을 추가 하시겠습니까? 동적 네이티브 SQL 쿼리 JPA에 <code>NOT IN</code> 절을 추가하는 방법

public final String s = "SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID NOT IN ?"; 
public final String e_not_in = "('a', 'b', 'c')"; 

,

List<Employee> el = getEm().createNativeQuery(s).setParameter(1, e_not_in); 

그러나 결과 목록이 데이터 'a', 'b''c'과 관련있는, 현재 더있다 이 상수 동적 매개 변수를 사용하는 SQL 상수의 쿼리 수가 200 개를 초과하는 경우 각 SQL 쿼리에서 NOT IN 절을 하드 코딩하거나 개별적으로 위치 매개 변수를 변경하는 것 이외의 해결 방법이 있습니까? , 'b''c'에 대한 EMPLOYEE_ID NOT IN (?1, ?2, ?3)과 같은 목록 항목. 문제가 생산 중이므로 즉시 해결해야합니다. 변경을 즉시 수행하는 방법이 도움이됩니다.

+1

이러한 쿼리는 누군가에 의해 변경되어야하며, 어떤 대안을 염두에 두어야합니까? –

+2

"문제는 생산 중입니다."그래서 아무도 그것을 공개하기 전에 실제로 확인하지 않았습니까? String 매개 변수를 사용하면 분명히 의도 한 바를 달성하지 못할 것입니다. –

+1

JPA1에 머물러 있다면 JDBC로 돌아갈 것 같습니까? 즉, EclipseLink에서 JDBC Connection을 가져온 다음 List를 입력 할 수 있습니다. https://wiki.eclipse.org/EclipseLink/Examples/JPA/EMAPI#Getting_a_JDBC_Connection_from_an_EntityManager –

답변

0

이 시도

감사 : 업데이트

Query query = em.createNativeQuery("SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID NOT IN (?)"); 
List<Long> ids = new ArrayList(); 
ids.add(1L); 
ids.add(2L); 
query.setParameter(1, ids); 

는 : 네, createNativeQuery를 의미한다.

+0

'createNamedQuery'? 당신은'createNativeQuery'를 의미합니다. 그렇지 않으면, 당신 말이 맞아. 물음표 주변의 괄호는 필수는 아니지만 Hibernate에서 지원하며 EclipseLink라고 생각합니다. – coladict

+0

제 경우는 JPA 1.0이며 set 매개 변수에서 List를 허용하지 않습니다. – BalaajiChander

관련 문제