我在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);