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
提交
取消