上代码
StringBuilder builder = new StringBuilder("from ExpressTrajectory where memberExpressId = ? and createDate >= ? and createDate <= ?");
List list = super.createQuery(builder.toString(), memberExpressId, beginDate, endDate).list();
其中beginDate和endDate是java.util.Date类型,这段代码执行会报异常:
org.hibernate.HibernateException: ordinal parameter mismatch
大概意思是参数类型不匹配
然后看了一下基类的createQuery方法是这样写的:
public Query createQuery(final String queryString, final Object... values) {
Query query = getSession().createQuery(queryString);
if (values != null) {
for (int i = 0; i
query.setParameter(i, values[i]);
}
}
return query;
}
其中使用了setParameter方法来设置参数,这样似乎hibernate处理不了Date类型的参数
于是把代码改成
StringBuilder builder = new StringBuilder("from ExpressTrajectory where memberExpressId = ? and createDate >= ? and createDate <= ?");
List list = super.createQuery(builder.toString()).setString(0, memberExpressId).setDate(1, beginDate).setDate(2, endDate).list();
直接用setDate来设置Date类型的参数,问题解决!