猿问

使用sql order by 和rownum 查询的问题,例子如下!求大神指点

select * from (select * from Ft_Sms_Interact_Dt order by send_time desc) where handle_status='0' and handle_user is null and rownum<6;
这条语句能查出想要的结果,但是如果转换成HQL:
select * from (select * from FtSmsInteractDt order by sendTime desc) where handleStatus='0' and handleUser is null and rownum<?;
就会报下面的异常:
unexpected token: * near line 1, column 8 [select * from (select * from com.umessage.smsManager.domain.FtSmsInteractDt order by sendTime desc) where handleStatus='0' and handleUser is null and rownum<?]
查了一下应该是hql中子查询语句不能放在where前面,试了好多办法,都没有得到想要的数据,求大神指点

守着一只汪
浏览 360回答 2
2回答

Smart猫小萌

看这么一段吧:在HQL中子查询必须出现在where子句中,而且必须用一对圆括号括起来。为什么必须要出现在where字句之后呢?其实我们大家仔细想一下也就知道了,在Hibernate中查询的任何一个实体对象都要有据可循,这个“据”就是Hibernate的主配置文件,也就是说凡是出现在HQL from字句中的实体对象,都必须要在Hibernate主配置文件中有明确的配置。所以在Hibernate中无法支持SQL语句中的那种出现在from字句之后的那种动态视图子查询。你这段查询,就不要考虑使用HQL了,用SQL就是了。

蝴蝶刀刀

order by 列a desc降序排列,order by 列a asc升序排列,当a列的值是一样的情况下,order by 列a 也就失去了意义,值相同哪里来的升序降序呢。因此如果你想让结果变动,可以按其他列排序呀,或者按rownum排序,即order by rownum asc ,order by rownum desc。希望能帮到你。
随时随地看视频慕课网APP

相关分类

MySQL
Oracle
我要回答