2012-07-12 43 views
2

可能重複:
SQL Query with MySQLSQL查詢使用Hibernate的RESTful Web服務

我實現了在Java中使用新澤西州REST Web服務(JAX-RS)。我使用休眠從MySQL數據庫中獲取數據。 與此查詢:

(Select distinct deliverable.id from Task as t where t.project.id= :id And t.user.username = :name order by t.id desc") 
        .setMaxResults(3) 
        .setLong("id", projectId) 
        .setString("name", username) 
        .list(); 

我有一個正確的結果,其爲:[275,51,286]。這是每一個ID在數據庫中提供的密鑰:

id  key 
--------------------- 
    275  2.0 
    51  cm 
    286  19.87 

現在我用這個查詢(一切都只是deliverable.key代替deliverable.id相同):

(Select distinct deliverable.key from Task as t where t.project.id= :id And t.user.username = :name order by t.id desc") 
        .setMaxResults(3) 
        .setLong("id", projectId) 
        .setString("name", username) 
        .list(); 

結果:[「2.0」,「19.88」,「19.99」]。第一個是對的,但第二個和第三個是完全不同的關鍵。

也許它可以通過「別名」或任何其他方式解決。你的建議?

+1

我想你會發現,如果你拿走.setMaxResults,你得到正確的結果,只是以不同的順序。 – 2012-07-12 18:00:11

+0

是的你是對的,但我需要完全按照這個順序。然後獲取前三名,這就是爲什麼我使用.setMaxResults。你有什麼想法如何修改查詢? – Ali 2012-07-12 19:03:24

+0

但是這是什麼順序呢?你不是很明確。對於這兩個查詢請嘗試像'ORDER BY t.id,deliverrable.id',或者您希望它的任何順序。 – 2012-07-12 19:14:09

回答

0

我找到了答案:

("select d.key from Deliverable as d, Task as t 
       where t.deliverable.id = d.id and 
       t.id = (select max(t1.id) from Task t1 where t1.deliverable.id = d.id) 
       and d.project.id= :id 
       and t.user.username = :name 
       order by t.id desc") 
     .setMaxResults(3) 
     .setLong("id", projectId) 
     .setString("name", username) 
     .list();