2012-08-26 23 views
0

請看一看這個蘇答案:如何表達這個SQL Hibernate的標準(?可能)

MySQL get row position in ORDER BY

基本上,得到一個排的位置時,有order by子句。有沒有可能在Hibernate標準中表達這一點?

這是查詢,因爲我有它。我真正追求的是,​​設置動態where子句PARAMS一種優雅的方式:

SELECT x.id, 
     x.position 
    FROM (SELECT dwq.id, 
       @rownum := @rownum + 1 AS position 
      FROM default_work_queue dwq 
      JOIN (SELECT @rownum := 0) r 
      WHERE dwq.type=4 *AND FOO=BAR* 
     ORDER BY dwq.description ASC) x 
WHERE x.id=540; 

也就是說,我希望能夠以額外的0-N號「和富=酒吧」添加於所提一部分不知所措,而沒有做一堆字符串操作。

回答

1

它不符合條件,因爲條件不支持FROM子句中的任意sql。然而這裏的另一個想法此查詢

// select the count of all elements before the wanted element 
int position = session.createCriteria(Work.class) 
    .add(restrictions) 
    .add(Subqueries.lt("description", DetachedCriteria.For(Work.class) 
     .add(Restriction.eq("id", id)) 
     .setProjection(Projection.Property("description")))) 
    .setProjection(Projection.RowCout()) 
    .UniqueResult<int>(); 

如果你有說明已經加載

你可以優化子查詢遠