繁体   English   中英

使用TopLink在JPA查询中列出作为命名参数

[英]List as a named parameter in JPA query using TopLink

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

@NamedQuery(name = "SortTypeNWD.findByFcIds", query = "SELECT s FROM SortTypeNWD s WHERE s.sortTypeNWDPK.fcId IN (:fcIds)")

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

Query findByDatesPlFcIds = em.createNamedQuery("SortTypeNWD.findByFcIds");
findByDatesPlFcIds.setParameter("fcIds", fcIds);

变量fcIds是包含整数的ArrayList。

以上所有代码都适用于Hibernate但不适用于TopLink:

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中使用List作为命名参数是否有解决方法? 可以强制命名参数的类型吗?

Toplink实现了JPA 1.0,它不支持将列表作为参数传递(collection_valued_input_parameter是文档中使用的术语)。 JPA 2.0支持这一点,JPA 2.0是在TopLink的后继者EclipseLink中实现的。

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

我遇到了类似的要求,并且当我将query.setParameter(“fcIds”,fcIds)更改为setParameterList(“fcIds”,fcIds)时成功了。 唯一的区别是我需要在使用Hibernate时进行此更改(我没有使用TopLink),相比之下你暗示setParamter()似乎正在使用Hibernate。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM