上代码
java
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类型,这段代码执行会报异常:ui
org.hibernate.HibernateException: ordinal parameter mismatchhibernate
大概意思是参数类型不匹配code
而后看了一下基类的createQuery方法是这样写的:get
public Query createQuery(final String queryString, final Object... values) { Query query = getSession().createQuery(queryString); if (values != null) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return query; }
其中使用了setParameter方法来设置参数,这样彷佛hibernate处理不了Date类型的参数io
因而把代码改为class
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类型的参数,问题解决!
List