上代碼
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