2012-09-29 60 views
0

使用openJPA時我可以給List作爲IN參數嗎?我使用的數據庫是MySQL最新版本。我正在嘗試工作的示例查詢如下所示,並且粘貼了我正在獲取的錯誤。請讓我知道我需要做些什麼來完成這項工作。openJPA IN參數類型作爲集合

Select * from table t where c in (?) 

.createNativeQuery(TOPIC) 
.setParameter(1, listNo) 

Where listNo is List<Long> 

錯誤

19:46:47,376 ERROR [org.jboss.ejb3.invocation] (http--127.0.0.1-8080-6) JBAS014134: EJB Invocation failed on component TopicService for method public abstract com.zreflect.emyed.vo.circle.TopicVO[] 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 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: The specified parameter of type "class java.util.ArrayList" is not a valid query parameter. 
+0

爲什麼「原生」查詢? JPQL允許IN查詢獲取List – DataNucleus

回答

0

我已轉換的陣列以由逗號分隔的字符串和傳遞的參數值。

現在這樣工作,因爲數組不支持本機查詢。

1

如果片段是JPQL或生SQL沒有指定。 還有兩種構建查詢的方法: NamedQueries 或 CriteriaBuilder。 可能更多。

我認爲最簡單的方法是使用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

但是:該列表並不總是需要至少有一個項目。我認爲空列表不起作用,或者產生錯誤的SQL語句。

塞巴斯蒂安

0

ParameterExpression如何?你如何使用ParameterExpression和TypedQuery.setParameter構造'in'表達式?