2

JPAは初めてで、すぐに取得できます。クエリで「IN」演算子を使用してselectクエリを試していたところ、ダウンとしてエラーが発生していました。私がしていることは、関数から(長い)メッセージIDの配列を取得し、それを使用してそれらのIDに基づいてレコードを選択することです。これが私の質問です

select t from MessageTable t where t.messageId IN (:id)  
query.setParameter("id", id);

コードの一部を示したところですが、エンティティではmessageIdが長く、OracleDBではその番号です。long変数と同じように機能しようとすると、長い配列を渡しても機能しないようです。誰かがそのような問題に遭遇した場合、誰かが助けることができます。これはエラーです

14:24:49,428 INFO[LongType]は値'[J@ 14f76da'をパラメーターにバインドできませんでした:1; [Jをjava.lang.Longにキャストすることはできません

4

2 に答える 2

7

long / Longに対してチェックする場合、配列Long[]とはINの有効なタイプの引数ではありません-以下のみです。long[]

  • Long
  • long
  • Collection<Long>(collection_valued_input_parameter)

JPAを使い続け、 Kshitijによって提案されたorg.Hibernate.Query.setParameterListを使用しない場合は、引数をに変換する必要がありますCollections<Long>

変換は、独自にローリングするか、たとえばArrayUtilを使用して簡単に実行できます。

long[] id = {1L, 2L};
Long[] longs = ArrayUtils.toObject(id);
Collection<Long> list = Arrays.asList(longs);
于 2012-05-21T18:41:26.640 に答える
2

これを試して:

query.setParameterList("id", ids);
于 2012-05-21T09:39:01.857 に答える