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:EJB 调用在组件 TopicService 上失败,用于方法公共抽象 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 非致命用户错误> org.apache.openjpa.persistence.ArgumentException:“class java.util.ArrayList”类型的指定参数不是有效的查询参数。

4

3 回答 3

2

您没有指定片段是 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 语句。

塞巴斯蒂安

于 2012-09-30T15:30:16.427 回答
0

我已将数组转换为以逗号分隔的字符串并传递了参数值。

它现在以这种方式工作,因为本机查询不支持数组。

于 2012-09-30T22:40:53.307 回答
0

参数表达式怎么样?如何使用 ParameterExpression 和 TypedQuery.setParameter 构造“in”表达式?

于 2013-11-25T08:14:14.253 回答