2011-02-02 45 views
2

Javaを使用する、Hibernate。IN句を使用するHibernate createNativeQuery

私は上記のコードを使用してpixIdsに、このパラメータを結合することができないんだけど、クエリ

String pixIds = "1,2,3"; 
String query = "SELECT * FROM comment WHERE PIX_ID IN (:pixIds)"; 
q.setParameter("pixIds", pixIds); 
List<Object[]> results = q.getResultList(); 

を持っています。これを行う正しい方法は何ですか?

注:ここでのクエリは、実際のクエリの簡略化されたバージョンです。

答えて

5

以下の方法が
公共クエリsetParameterList(文字列名、コレクションヴァルスは)私はpixIdのは、文字列ではなく、コレクションであると付け加え逃したHibernateExceptionで

+2

ネイティブクエリのためのそのようなメソッドはありません。 –

4

Hibernateは、SQLクエリでIN (...)へのバインディングコレクションをサポートしていません。

コレクションを指定すると、適切な数の?を含むクエリをIN句に動的に生成し、そのコレクションの要素を?にバインドします。

+0

は申し訳ありませんがスローされます動作します。変更を含めるためにオリジナルの投稿を編集しました。 – smahesh

+0

@sammichy:まったく同じこと:3つの '?'を作成し、個々の 'setParameter()'呼び出しで '1'、' 2'、 '3'をバインドする必要があります。 – axtavt

+0

私はすでにそれを試していたし、それは働いた。しかし、コンパイルされたSQLは再利用されないのですか?このクエリは多用されているので、より最適なものがあるかどうかを確認したいと考えました。 – smahesh

関連する問題