hibernate hql中当查询条件为时间格式时的问题

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

相关文章
相关标签/搜索