我在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。

最佳答案

我想你只需要使用

 IN :stringId

代替
 IN (:stringId)

对于JPA
namedQuery.setParameter("stringId", strIds);

是正确的,但对于Hibernate,您应该使用
namedQuery.setParameterList("stringId", strIds);

10-01 00:53