2011-12-06 33 views
1

我想在我的HQL中使用RowNumOrderby。底層數據庫是Oracle。 如預期Rownum在訂購之前執行(我不想要)。在HQL中使用Rownum和OrderBy

在SQL中,這可以使用from子句中的Subselect來完成,但是如何在不影響性能的情況下在HQL中實現這一點。此外,HQL不允許在子句中使用子查詢。 試過:

setFirstResult(resultsetLimit) 
setMaxResults(resultsetLimit) 
setFetchSize(resultsetLimit) 

並且它的性能非常糟糕。

我不是Hibernate專家,所以請原諒,如果我失去了什麼或做任何事情嚴重。 也在這一點上,我沒有選擇,只能使用HQL。

回答

1

HQL支持子選擇和子查詢。

For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed.

至於說社會上的文檔here英寸

+1

「HQL子查詢只能出現在select或where子句中。」 select子句中的子查詢應返回單個值...在我的情況下有多個值..感謝您的答案您 – airboss

+1

由於您的查詢變得複雜,嘗試將其移動到** SQL,函數或存儲過程**將很容易維護。如果有幫助,你可以接受答案。 – ManuPK