1

openJPA を使用する場合List<Long>、パラメーターとして指定できますか?IN

私が使用しているデータベースは MySQL の最新バージョンです。私が作業しようとしているクエリの例は以下のとおりで、取得しているエラーも貼り付けられています。これを機能させるために何をする必要があるか教えてください。

Select * from table t where c in (?)
.createNativeQuery(TOPIC)
.setParameter(1, listNo)

はどこlistNoですかList<Long>

エラー

19:46:47,376 エラー [org.jboss.ejb3.invocation] (http--127.0.0.1-8080-6) JBAS014134: メソッド public abstract com.zreflect.emyed.vo.circle.TopicVO のコンポーネント TopicService で EJB 呼び出しが失敗しました[] com.zreflect.emyed.ejb.interfaces.ITopicService.getSelectedTopics(long,java.util.List,com.zreflect.emyed.vo.UserSession): javax.ejb.EJBException: <openjpa-2.2.0-r422266: 1244990 致命的ではないユーザー エラー> org.apache.openjpa.persistence.ArgumentException: タイプ "class java.util.ArrayList" の指定されたパラメーターは、有効なクエリ パラメーターではありません。

4

3 に答える 3

2

スニペットが JPQL か生の SQL かを指定していません。NamedQueries または CriteriaBuilder の 2 つのクエリを作成する方法もあります。潜在的にさらに多く。

最も簡単な方法は、JPQL クエリを使用することだと思います。

String JPQL = "Select * from table t where c in (:value)"

ArrayList<Integer> myList = new ArrayList<Integer>();
myList.add(1);

次の方法を使用できます。

TypedQuery.setParameter("value",myList);

参照: http://docs.oracle.com/javaee/6/api/javax/persistence/TypedQuery.html#setParameter%28java.lang.String,%20java.lang.Object%29

ただし: リストには常に少なくとも 1 つの項目が必要です。空のリストは機能しないか、間違った SQL ステートメントを生成すると思います。

セバスチャン

于 2012-09-30T15:30:16.427 に答える
0

配列をコンマで区切られた文字列に変換し、パラメーター値を渡しました。

ネイティブクエリでは配列がサポートされていないため、現在このように機能しています。

于 2012-09-30T22:40:53.307 に答える