2017-03-16 37 views
0

如何動態地添加NOT IN條款在原生SQL查詢JPA,使用位置參數在本地查詢中添加'NOT IN'子句?

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

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

但是得到的名單與'a''b''c'數據,目前有更多的比使用這個常量動態參數的SQL常量中的200個查詢,除了對每個SQL查詢中的NOT IN子句進行硬編碼或將位置參數更改爲個人之外,是否還有其他解決方法列表項目如EMPLOYEE_ID NOT IN (?1, ?2, ?3)'a','b''c',由於問題在生產中,需要立即解決,任何可立即進行更改的解決方案都會有所幫助。

感謝

+1

這些查詢需要由某人改變,你有什麼選擇? –

+2

「問題在於生產」:所以沒有人在釋放之前檢查過它?使用String參數顯然永遠不會實現什麼意圖 –

+1

如果您被困在JPA1中,考慮回到JDBC嗎?我的意思是,從EclipseLink獲得JDBC連接,然後你可以輸入一個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