当前位置: 代码迷 >> Java Web开发 >> Hibernate中使用HQL过滤数据,在HQL中使用Map存放参数遇到的有关问题
  详细解决方案

Hibernate中使用HQL过滤数据,在HQL中使用Map存放参数遇到的有关问题

热度:307   发布时间:2016-04-13 22:26:16.0
Hibernate中使用HQL过滤数据,在HQL中使用Map存放参数遇到的问题
Manager中部分代码如下:

@Transactional(readOnly = true)
public Page<Org> findPage(Page<Org> page,String oname,String createtime) {
StringBuffer hql=new StringBuffer();
hql.append("select x from Org x,User u where x.adminId=u.id and x.isDel=0");
Map<String,Object> map=new HashMap<String,Object>();
map.put("isDel", 0);
                 //写法一:
if(StringUtils.isNotBlank(oname)){
hql.append(" and x.oname like :oname");
map.put("oname", "%"+oname+"%");
}
                //写法二:
if(StringUtils.isNotBlank(createtime)){
hql.append(" and x.createtime like '%"+createtime+"%'");
}
return orgDao.findPage(page,hql.toString(),map);

其中“createtime” 传进来的是时间,这个就不能像写法一那样 put到map里。


if(StringUtils.isNotBlank(createtime)){
if(StringUtils.isNotBlank(endtime)){
hql.append(" and x.createtime >='"+createtime+"' and x.createtime <='"+endtime+"'");
// hql.append(" and x.createtime >=:createtime and x.createtime <=:endtime");
// pros.put("createtime", createtime);
// pros.put("endtime", endtime);
}else{
hql.append(" and x.createtime >='"+createtime+"'");
// hql.append(" and x.createtime >=:createtime");
// pros.put("createtime", createtime);
}
}


还有这种写查询起始时间的。使用拼接的方式 可以,但put到map中就会报错。程序现在别人在用,暂时不能提供报错信息。
不过记得有提示过String 转Data类型出错。
那这个是在HQL里转数据类型还是在PUT的时候转呢?应该怎么写呢?
求大神给个示例,谢谢。

------解决思路----------------------
为什么不能Put呢?  用占位符啊

而且你这样拼接参数,不用担心sql注入么?
------解决思路----------------------
java.lang.String cannot be cast to java.util.Date

你做日期比较,当你数据库表的字段为日期类型,你传入字符串去比较肯定不对

String createtime 这个createtime 进行转一下,转成日期类型去做操作

或者 在sql里面加上日期函数去操作
  相关解决方案