请教hibernate的排序问题!!

拥抱java JAVA开发  2010-10-14 09:36:01
我现在用query对象执行hql语句进行查询,为什么我的hql语句order by不能跟问号?我想实现按我所传参数进行排序应该怎么写,本人新手,请多多指教!!
String hql = "select o from OriginalDataResultModel o where " +
"o.collecttimeObject between ? and ? and o.stid in(:stid) order by ? ?";
Query q = s.createQuery(hql);
q.setParameter(0,startDate);
q.setParameter(1,endDate);
q.setParameterList("stid",stidlist);
if(dir!=null){
q.setParameter(4, dir);
}
if(sort!=null){
q.setParameter(3, "o."+sort);
}
...全文
178 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
海的童话 2010-10-14
就用:name 干嘛用?
q.setXX("name",value);参数是什么类型调用相应的setXX()方法。
回复
zn85600301 2010-10-14
[Quote=引用 5 楼 lln_avaj 的回复:]

这个我知道啊 我传的就是实体类的属性名 应该是这样order by o.sort dir吗?不好使~~
[/Quote]
dir 的值没传吧
还有你可以把HQL 编译后的SQL 放到数据库工具调试下
顺便说下 o. 可以不加的 select o 也可以去掉
between and 还有 in 是十分消耗性能的
回复
kerioz 2010-10-14
我也不知道到底错哪了 可以去网上搜下 这种多条件的语句建议使用craite语句 先查全部再使用add添加条件 真的 那个好用些 这个语句看了就郁闷 感觉吧 那个between和and之间有问题
回复
拥抱java 2010-10-14
这个我知道啊 我传的就是实体类的属性名 应该是这样order by o.sort dir吗?不好使~~
回复
kerioz 2010-10-14
hql语句orderby后面是不可以跟?的呢要排序的话可以这么做 比如说你要按类型还有很多其他的来排序 现在我们可以声明一个变量 String order hql语句里面这么写 ……orderby order;就好 至于order的值是什么就看你自己业务了 比如我们有个列表 里面是排序类型 按时间(time) 按类别(typr) 按序号(id)什么的这时候传过去的order就是 time type id了 还有一点记得 hql查询的对象不是数据库表的名字是你映射生成的实体类对象名
回复
拥抱java 2010-10-14
直接赋值要怎么赋值呢?
final sort="o."+query.getSort();
final dir=query.getDir();
String hql = "select o from OriginalDataResultModel o where " +
"o.collecttimeObject between ? and ? and o.stid in(:stid) order by sort dir";
这样不行呀~~
打印出的sort和dir分别是o.stid和asc
回复
不是0123
回复
bean 2010-10-14
直接用一个变量吧,把你传进来的值赋给它
回复
magong 2010-10-14
订正: sort和dir之间不要逗号
回复
magong 2010-10-14
参数查询字符串中的参数不能是标识符,只能是值。
order by后直接写?肯定不行
解决方案两个:
String hql = "select o from OriginalDataResultModel o where " +
"o.collecttimeObject between ? and ? and o.stid in(:stid) order by " + query.getSort() + " , " + query.getDir();

先拼接好
②使用Hibernate Criteria API
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-14 09:36
社区公告
暂无公告