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

上代码

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 < values.length; 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类型的参数,问题解决!

你可能感兴趣的:(hibernate hql中当查询条件为时间格式时的问题)