hibernate hql中当查询条件为时间格式时的问题
博客专区 > z_jordon 的博客 > 博客详情
hibernate hql中当查询条件为时间格式时的问题
z_jordon 发表于3年前
hibernate hql中当查询条件为时间格式时的问题
  • 发表于 3年前
  • 阅读 11
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: hibernate hql中当查询条件为时间格式时的问题,用Query.setParameter不行,只能用setDate来设置日期参数

上代码

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 35
博文 250
码字总数 78212
×
z_jordon
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: