【发布时间】:2014-06-06 17:45:28
【问题描述】:
我在 Dao 类中有一个方法返回 List<Object[]>,我正在使用命名查询
public List<Object[]> getListByCustomer(Session session, int customerId, List<Integer> strIds) {
Query namedQuery = session.createSQLQuery(QueryConstants.EXPORT);
namedQuery.setParameter("customer", customerId);
namedQuery.setParameter("stringId", strIds);
List<Object[]> objects = namedQuery.list();
return objects;
}
我想将 stringId 中的List<Integer> strIds 传递到命名查询中,如下所示:
public class QueryConstants {
public static final String EXPORT =
"SELECT sv.NAME, sv.TYPE, sv.CLIENT_ADDRESS, sv.NAME_REDUNDANT, sv.DEPARTURE_DATE, s1.CODE,sv.STATE, sv.CODE "
+ "FROM VIEW sv, PROCESS p1, SET s1 "
+ "WHERE sv.R_ID = p1.R_ID and p1.ISSUER_ID = s1.USER_ID and sv.CUSTOMER_ID = :customer and sv.R_ID IN (:stringId)";
}
但我得到ORA-00932: inconsistent datatypes: expected NUMBER got BINARY.
此外,当我从查询中删除 sv.R_ID IN (:stringId) 时,它可以正常工作并且
当我将 Integer(strIds) 而不是 List<Integer> strIds 传递到查询中时,它可以正常工作。
我使用的是 Oracle 10g。
【问题讨论】:
-
是尝试删除 (...) 即 sv.R_ID IN :stringId 仍然相同的错误。
-
您的 JPA 供应商是什么?你也可以试试 namedQuery.setParameter("stringId", Arrays.toString(strIds.toArray()));有或没有 (...) ?
-
您不能绑定列表以在
IN子句中使用。您需要将其转换为 Oracle 数组对象,将其视为表,然后使用连接。 -
有人知道 SQL 查询中是否支持 IN 子句的参数绑定(相对于 JPQL 或 HQL)?很可能不会。
标签: java sql oracle named-query