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前面,试了好多办法,都没有得到想要的数据,求大神指点
2 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
看这么一段吧:
在HQL中子查询必须出现在where子句中,而且必须用一对圆括号括起来。为什么必须要出现在where字句之后呢?其实我们大家仔细想一下也就知道了,在Hibernate中查询的任何一个实体对象都要有据可循,这个“据”就是Hibernate的主配置文件,也就是说凡是出现在HQL from字句中的实体对象,都必须要在Hibernate主配置文件中有明确的配置。
所以在Hibernate中无法支持SQL语句中的那种出现在from字句之后的那种动态视图子查询。
你这段查询,就不要考虑使用HQL了,用SQL就是了。
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
order by 列a desc降序排列,order by 列a asc升序排列,当a列的值是一样的情况下,order by 列a 也就失去了意义,值相同哪里来的升序降序呢。因此如果你想让结果变动,可以按其他列排序呀,或者按rownum排序,即order by rownum asc ,order by rownum desc。
希望能帮到你。
添加回答
举报
0/150
提交
取消