简单的HQL问题

lgq_0714 2009-06-27 10:18:40
怎样用HQL语句查询出点击率前十的记录?(数据库是mysql,表名Answer ,点击率clickcount)
...全文
222 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdtwyjp 2009-06-30
  • 打赏
  • 举报
回复
limit 只能在MYSQL中用于分页!
longq121 2009-06-29
  • 打赏
  • 举报
回复
4,5楼不正解,QUERY.setMaxResults()
就是用的 limit 实现的,这里不能用具体的关键字,
这样也是方便数据库移植
码YouMe 2009-06-29
  • 打赏
  • 举报
回复
学习ing。。。
ebillykane 2009-06-29
  • 打赏
  • 举报
回复
学习了~收益不浅~
leeking888 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shihukui 的回复:]


Java code
String hql = "from Answer order by clickcount desc";

Query query = session.createQuery(hql);

query.setFirstResult(0);
query.setMaxResult(10);

List list = query.list();
[/Quote]

正解
lgq_0714 2009-06-29
  • 打赏
  • 举报
回复
谢谢各位,受益良多啊!
puhongchun 2009-06-29
  • 打赏
  • 举报
回复
Hql中没有limit这一写法,只有mySql中才能这样写

HQL语句中存在的东西有

普通JavaBean类名,JavaBean属性,

例如from JavaBean类名 as 别名 where 别名.JavaBean属性=?


Query query=session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResult(10);
List list=query.list();

就是这种来控制结果数量
snowfox3761 2009-06-29
  • 打赏
  • 举报
回复
HQL好像不支持limit,limit在SqlServer中好像可以用,但是oracle中没有,
而hibernate是通过配置文件就可以配置不同数据库,所以通用性的东西都会有,
hibernate中内置执行sql的方法,具体是哪个忘了,google一下应该就可以找到,
实在不行就可以自己写sql,1年前用过hibernate,记得是这样的。
lgq_0714 2009-06-29
  • 打赏
  • 举报
回复
HQL里面到底可不可以用limit?
robyjeffding 2009-06-28
  • 打赏
  • 举报
回复
使用本地化的SQL语句,可以达到一样的效果
Query query = session.createSQLQuery(" select top 10 * from newInfo where newID not in (select top 10 newID from newInfo newID desc ) and newID desc "); //用本地sql可以不
vip_123 2009-06-28
  • 打赏
  • 举报
回复
分页SQL语句



select top 一页显示条数 * from 表名 where ID(自动增加列)
not in(select top (页数量-1)一页显示条数 ID(自动增加列) from 表名 where ID(自动增加列) desc ) and ID(自动增加列) desc

例:
查找前十条最新新闻

第一页
select top 10 * from newInfo where newID not in (select top 10 newID from newInfo newID desc ) and newID desc

第二页

select top 10 * from newInfo where newID not in (select top (2-1)*10 newID from newInfo newID desc ) and newID desc

qiheia 2009-06-28
  • 打赏
  • 举报
回复


Java codeString hql="from Answer order by clickcount desc";
Query query=session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResult(10);
List list=query.list();

无意中,发现一个重大问题
setMaxResult少了个s也
应该是setMaxResults


应该改成这样

Java codeString hql="from Answer a order by a.clickcount desc";
Query query=session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResults(10);
List list=query.list();

默然说话 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shihukui 的回复:]

Java code

String hql = "from Answer order by clickcount desc";

Query query = session.createQuery(hql);

query.setFirstResult(0);
query.setMaxResult(10);

List list = query.list();


[/Quote]

严重同意。
li87438650 2009-06-28
  • 打赏
  • 举报
回复
hql好像不支持limit
xuexijava 2009-06-28
  • 打赏
  • 举报
回复
再顶
wine1 2009-06-28
  • 打赏
  • 举报
回复
我顶
lvfeng19806001 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 robyjeffding 的回复:]
使用本地化的SQL语句,可以达到一样的效果
Query query = session.createSQLQuery(" select top 10 * from newInfo where newID not in (select top 10 newID from newInfo newID desc ) and newID desc "); //用本地sql可以不

[/Quote]
这个也不错!
freedom36 2009-06-28
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
limit 0,10 还有错?
lgq_0714 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jueno1 的回复:]
分页SQL语句


select top 一页显示条数 * from 表名 where ID(自动增加列)
not in(select top (页数量-1)一页显示条数 ID(自动增加列) from 表名 where ID(自动增加列) desc ) and ID(自动增加列) desc

例:
查找前十条最新新闻

第一页
select top 10 * from newInfo where newID not in (select top 10 newID from newInfo newID desc ) and newID desc

第二页

select top 10 * from …
[/Quote]
我的数据库是mysql,没有top关键字!
加载更多回复(11)

81,091

社区成员

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

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