hibernate使用criteria如何实现排序分组

wtc860104 2011-10-12 02:28:02
sql的话或者hql的就不要说了啊,我会的。。。
现在关键是用criteria来实现
比如
Student类有

string name
string address
date birthday
date flushdate
flushdate表示刷新时间,具体啥作用因为不涉及到本技术所以不做过多解释
现在需求就是,使用只criteria,来实现先排序,后分组
效果如下sql

select name from
(select name from student order by flushdate)
group by name



...全文
606 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtc860104 2011-10-14
  • 打赏
  • 举报
回复
算了,自己解决了,用的criteria
分组的时候按主键和日期分组就好了
查到id的集合然后在按id得到对象
lawrence16 2011-10-14
  • 打赏
  • 举报
回复
看看
不会啊
wtc860104 2011-10-13
  • 打赏
  • 举报
回复
第一个sql语句执行结果前21条

1 10000540
2 10000541
3 218
4 220
5 225
6 415
7 429
8 432
9 434
10 443
11 455
12 472
13 473
14 474
15 127
16 129
17 130
18 1
19 45
20 47
21 55

第二个sql语句结果前21条
1	218
2 220
3 225
4 231
5 415
6 429
7 432
8 434
9 441
10 443
11 455
12 472
13 473
14 474
15 10000540
16 10000541
17 127
18 129
19 130
20 1
21 45
wtc860104 2011-10-13
  • 打赏
  • 举报
回复

select y0_ from (
select
this_.CCCW10 as y0_
from
CCW1 this_
left outer join
CCW2 ccw2x1_
on this_.CCCW10=ccw2x1_.cccw10
left outer join
CCW3 ccw3x2_
on this_.CCCW10=ccw3x2_.cccw10
left outer join
CCW4 ccw4x3_
on this_.CCCW10=ccw4x3_.cccw10
order by this_.AAE136
)
group by y0_

;
select
this_.CCCW10 as y0_
from
CCW1 this_
left outer join
CCW2 ccw2x1_
on this_.CCCW10=ccw2x1_.cccw10
left outer join
CCW3 ccw3x2_
on this_.CCCW10=ccw3x2_.cccw10
left outer join
CCW4 ccw4x3_
on this_.CCCW10=ccw4x3_.cccw10
group by this_.CCCW10

wtc860104 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 oxcow 的回复:]

引用 10 楼 wtc860104 的回复:

引用 9 楼 oxcow 的回复:

引用 6 楼 wtc860104 的回复:

自顶
现在关键是select name from
(select name from student order by flushdate)
group by name
外面的怎么和里面,利用criteria嵌套起来


具体的说是上面的S……
[/Quote]
看下面测试结果吧
oxcow 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 oxcow 的回复:]

引用 10 楼 wtc860104 的回复:

引用 9 楼 oxcow 的回复:

引用 6 楼 wtc860104 的回复:

自顶
现在关键是select name from
(select name from student order by flushdate)
group by name
外面的怎么和里面,利用criteria嵌套起来


具体的说是上面的S……
[/Quote]

总之,个人认为select name from (select name from student order by flushdate) group by name 这个SQL,不管用HQL还是criteria都是实现不了的!

如果能实现,还请不吝指教。
oxcow 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wtc860104 的回复:]

引用 9 楼 oxcow 的回复:

引用 6 楼 wtc860104 的回复:

自顶
现在关键是select name from
(select name from student order by flushdate)
group by name
外面的怎么和里面,利用criteria嵌套起来


具体的说是上面的SQL可以用HQL写么?
select name f……
[/Quote]

select name from (select name from student order by flushdate) group by name
这句意思是先按flushdate排序,再分组
之所以这么做,是因为要涉及到分页

1. 这个最外面的group by的时候会考虑 order by ???
2. 这个跟分页有关系么? select * from (select name from student group by name) where rownum<10 和 select * from (select name from (select name from student order by flushdate) group by name) where rownum<10 结果有区别没?

如果select name from student group by name,就没有排序的效果了

3.你要的是什么的排序结果,这对这个SQL ,只能针对name排序! 是根据 name 分组,因此对于flushdate的先后是不做考虑的。

select name from student order by flushdate group by name会报错!!

4、这句话当然会报错。语法规定 分组时 order要放在最后。
select name from student group by name order by flushdate 这句SQL在ORACLE是报错的,而在mysql中是可以执行的。

其实你可以在你的数据库中测试下一下两条SQL

select name from student group by name和
select name from (select name from student order by flushdate) group by name
看下到底数据结果顺序是你想的那样第二句就根据flushdate排序了么?

测试下就知道了。

wtc860104 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 oxcow 的回复:]

引用 6 楼 wtc860104 的回复:

自顶
现在关键是select name from
(select name from student order by flushdate)
group by name
外面的怎么和里面,利用criteria嵌套起来


具体的说是上面的SQL可以用HQL写么?
select name from (select name from……
[/Quote]
select name from (select name from student order by flushdate) group by name
这句意思是先按flushdate排序,再分组
之所以这么做,是因为要涉及到分页
如果select name from student group by name,就没有排序的效果了
而且select name from student order by flushdate group by name会报错!!
oxcow 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wtc860104 的回复:]

自顶
现在关键是select name from
(select name from student order by flushdate)
group by name
外面的怎么和里面,利用criteria嵌套起来
[/Quote]

具体的说是上面的SQL可以用HQL写么?
select name from (select name from student order by flushdate) group by name
和这个 select name from student group by name 结果有什么区别么?除了执行过程外(查询计划),前面这句SQL只能是多此一举了!

oxcow 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 wtc860104 的回复:]
sql的话或者hql的就不要说了啊,我会的。。。
现在关键是用criteria来实现
比如
Student类有

string name
string address
date birthday
date flushdate
flushdate表示刷新时间,具体啥作用因为不涉及到本技术所以不做过多解释
现在需求就是,使用只criteria,来实现先排序,后分组
效果如下sql……
[/Quote]

这个可以用HQL实现么??
wtc860104 2011-10-12
  • 打赏
  • 举报
回复
求人帮解答
求人帮解惑
wtc860104 2011-10-12
  • 打赏
  • 举报
回复
自顶
现在关键是select name from
(select name from student order by flushdate)
group by name
外面的怎么和里面,利用criteria嵌套起来
wtc860104 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jy04603037 的回复:]

DetachedCriteria dc 实例
dc.addOrder(Order.desc("flushdate"));
[/Quote]
分组呢?
你这么写的话和Criteria.addOrder(Order.desc("flushdate"))一样吗?
jy04603037 2011-10-12
  • 打赏
  • 举报
回复
DetachedCriteria dc 实例
dc.addOrder(Order.desc("flushdate"));
wtc860104 2011-10-12
  • 打赏
  • 举报
回复
都睡着了?
wtc860104 2011-10-12
  • 打赏
  • 举报
回复
筒子们来给力啊!!!!!!来点激情!!!!人呢?????
wtc860104 2011-10-12
  • 打赏
  • 举报
回复
闲的没事的都来看看

81,122

社区成员

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

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