日期:2014-05-20  浏览次数:20735 次

hibernate随机排序问题
大家都知道不少数据库都支持随机排序,例如MySQL 用order by rand(),oracle用order by newid()等等,在hibernate中,用什么来实现随机排序啊,比如是对用户库进行随机抽奖的应用

------解决方案--------------------
这个是数据库支持的。HQL应该没有这个功能,没有那么完善。
既然MySQL,Oracle都支持了你就在SQL里用呗。
如果有数据库不支持,可以在查询的时候给每一条数据生成一个随机数列,然后order by 这个随机数列就可以了。

例如sqlserver里有rand()函数(各个数据库应该都这种生成随机数的函数) 就可以达到这种效果,
当然sqlserver有 newid()可以直接完成此功能,此处举个例子。


------解决方案--------------------
Java code
List datas = session.createQuery("from ClassName c where ... order by ... group by...").list()
//让List里面的元素随机排列
Collections.shuffle(datas);

------解决方案--------------------
hibernate中实现随机排序的功能很简单,比如hql,可以这么写
this.sessionFactory.getCurrentSession().createQuery("from User u order by newid()").list();
------解决方案--------------------
你要在Hibernate实现这种功能的话,还可以这样搞
Java code
List datas = session.createSQLQuery("select * from tb where ... order by rand()").list()