2017-03-16 3 views
0
動的ネイティブSQLクエリJPAで NOT IN句を追加する方法

、Javaコードで位置パラメータを使用してネイティブクエリにNOT IN句を追加しますか?

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

「問題は生産中です」:実際にリリース前にそれをチェックした人はいませんか?文字列パラメータを使用すると、意図が達成されることは決してありません –

+1

JPA1で動かないとJDBCに戻ると考えられますか?つまり、EclipseLinkからJDBC Connectionを取得したら、リストを入力することができます。おそらく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

関連する問題