hibernate 中的hql怎么写?要取时间段中的记录

wswzh0329 2016-12-13 10:45:26
。。如题,大神帮忙看看
 select ds from com.ydyd.gf.domain.DxSendHistory ds WHERE 1=0 OR ds.recvtime BETWEEN Mon Dec 12 22:36:40 CST 2016 AND Tue Dec 13 22:36:40 CST 2016


这样写为什么报异常了?
nested exception is org.hibernate.hql.ast.QuerySyntaxException:

ps:recvtime 是实体类DxSendHistory 中Date类型的成员
...全文
212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wswzh0329 2016-12-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_35826277 的回复:
如果你用的是2楼setParameter的方式,是可以不用手动添加引号的;如果你是自己拼接的,那就需要了
我一开始没意识到要加引号,但是运行的时候 没有 任何的提示信息,至于出现的结果是不是正确的 ,现在不敢保证了。 ,然后后面写一个update语句的时候,发现出现各种问题,加上引号就全解决了,这下才引起了该帖的提问。 请教一下,不加引号查询会有什么影响?谢谢回答~
wswzh0329 2016-12-15
  • 打赏
  • 举报
回复
引用 2 楼 github_36116217 的回复:

Query query = session.createQuery("select u from User u where u.birthday between ? and ?");
		query.setDate(0,new Date("Mon Dec 12 22:36:40 CST 1990"));
		query.setDate(1,new Date("Tue Dec 13 22:36:40 CST 2016"));
谢谢回答,我用转类型的方式 完成 功能了!! 然后 我不知道我这个框架中能不能得到session,所以没有试您说的这种方式, 再问一个问题,hql语句中的字符串需要手动加单引号吗(e.g.实体类中的属性 是字符串,拼接的时候需要加单引吗),请指教,再次感谢~
logger.info("开始dao中的loadByDate()方法");
		List<DxSendHistory> list = null;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String begdate = sdf.format(begin);
		String currentdate = sdf.format(current);
		StringBuffer sql = new StringBuffer();
		sql.append(" select ds from DxSendHistory ds WHERE 1=1");
		if(begin == null || current == null){
			throw new RuntimeException("时间段选择错误!");
		}
		sql.append(" AND (ds.recvtime >= to_date('"+ begdate +
				"','yyyy-MM-dd') AND ds.recvtime < to_date('" +
				currentdate + "','yyyy-MM-dd'))" );
		if(sendHistory == null || 
				sendHistory.getSystemid() == null || 
				"".equals(sendHistory.getSystemid())){
			throw new RuntimeException("分中心systemid不能为空");
		}
		sql.append(" AND ds.systemid = '" + sendHistory.getSystemid() + "'"); //这里字符串必须加单引号吗 我之前没加单引号也能执行,不知道会有什么影响? 
		list = (List<DxSendHistory>)super.createQuery(sql.toString()).list();
		logger.info("查询到的更新数据list=" + list);
Mithiu 2016-12-15
  • 打赏
  • 举报
回复
如果你用的是2楼setParameter的方式,是可以不用手动添加引号的;如果你是自己拼接的,那就需要了
github_36116217 2016-12-14
  • 打赏
  • 举报
回复

Query query = session.createQuery("select u from User u where u.birthday between ? and ?");
		query.setDate(0,new Date("Mon Dec 12 22:36:40 CST 1990"));
		query.setDate(1,new Date("Tue Dec 13 22:36:40 CST 2016"));
wswzh0329 2016-12-13
  • 打赏
  • 举报
回复
。。自顶一个

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧