首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用TopLink的JPA查询中将列表作为命名参数

在使用TopLink的JPA查询中将列表作为命名参数
EN

Stack Overflow用户
提问于 2009-07-23 07:46:38
回答 2查看 9.1K关注 0票数 6

在下面的JPA查询中,:fcIds命名参数需要是一个整数值列表:

代码语言:javascript
运行
复制
@NamedQuery(name = "SortTypeNWD.findByFcIds", query = "SELECT s FROM SortTypeNWD s WHERE s.sortTypeNWDPK.fcId IN (:fcIds)")

从逻辑上讲,这是在调用命名查询时执行的操作:

代码语言:javascript
运行
复制
Query findByDatesPlFcIds = em.createNamedQuery("SortTypeNWD.findByFcIds");
findByDatesPlFcIds.setParameter("fcIds", fcIds);

其中,变量fcIds是包含整数的ArrayList。

上面的代码在Hibernate上运行良好,但在TopLink上就不行了:

代码语言:javascript
运行
复制
Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter fcIds with expected type of int from query string SELECT s FROM SortTypeNWD s WHERE s.sortTypeNWDPK.fcId IN (:fcIds).

在TopLink中,是否有将列表用作命名参数的解决方法?可以强制指定命名参数的类型吗?

EN

回答 2

Stack Overflow用户

发布于 2009-10-13 17:05:48

Toplink实现了JPA1.0,它不支持将列表作为参数传递(collection_valued_input_parameter是文档中使用的术语)。这在TopLink的后续版本EclipseLink中实现的JPA2.0中得到了支持。

如果您必须坚持使用TopLink,那么您需要编写一个循环来将列表中的每一项都作为参数包含在内。

票数 4
EN

Stack Overflow用户

发布于 2009-10-09 14:50:37

唯一的区别是,我需要在使用Hibernate时进行此更改(我没有使用TopLink),而您所暗示的setParamter()似乎可以使用Hibernate。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1170266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档