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

标签 java jpa 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 是文档中使用的术语)。这在 TopLink 的继任者 EclipseLink 中实现的 JPA 2.0 中得到支持。

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

关于java - 使用 TopLink 在 JPA 查询中作为命名参数列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170266/

相关文章:

java - 如何为动态创建数据库表的方法编写单元测试?

java - 为什么不保留新实体?

java - 映射中的错误 : The object of class String, 无法转换为 [class java.sql.Timestamp]

java - 使用鼠标在 Java 中设置圆弧位置

java - 加载数据避免在持久性上下文中找到的实体

java - 将用户输入的数据与 SQL 数据库数据进行比较

java - JPA:可以使用 "long fooId"而不是 "Foo foo"作为 @JoinColumn (对于 JSON 兼容)?

java - 如何使用 ExpressionBuilder 将 "myfields >= TRUNC(sysdate)"子句添加到 ReportQuery (Toplink)

java - Java 中的泛型声明差异

java - Android:无法从给定的 url 播放 mp3 文件