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

Gil*_*les 6 java jpa toplink

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

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

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

Query findByDatesPlFcIds = em.createNamedQuery("SortTypeNWD.findByFcIds");
findByDatesPlFcIds.setParameter("fcIds", fcIds);
Run Code Online (Sandbox Code Playgroud)

变量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).
Run Code Online (Sandbox Code Playgroud)

在TopLink中使用List作为命名参数是否有解决方法?可以强制命名参数的类型吗?

ae6*_*6rt 0

我遇到了类似的要求,当我将 query.setParameter("fcIds", fcIds) 更改为 setParameterList("fcIds", fcIds) 时成功。唯一的区别是我需要在使用Hibernate时进行此更改(我没有使用 TopLink),而您暗示 setParamter() 似乎正在与 Hibernate 一起使用的情况。