2012-09-02 47 views
0

我做這個查詢:如何通過id來避免hibernate默認命令?

String query = FROM Account acc WHERE acc.id = ? OR acc.id = ? or acc.id = ?... 

我有ID的數組:

long[] accountIds= {327913,327652,327910,330511,330643}; 

然後我讓

getHibernateTemplate().find(query, accountIds); 

我看到帳戶列表我從該查詢返回是:

327652,327910,327913,330511,330643,顯然,由我排序d。

有沒有機會按照我寫的ID的順序把它取回來?

會感謝所有幫助

回答

1

你不能做到這一點的查詢級別。
您可以從數據庫加載後進行排序,這樣的事情

long[] accountIds= {327913,327652,327910,330511,330643}; 
    List<Account> afterHql = getHibernateTemplate().find(query, accountIds); 
    List<Account> sortedList = new ArrayList<Acount>(); 
    for (long id : accountIds) 
    { 
     for (Account account : afterHql) 
     { 
      if (account.getId() == id) 
      { 
       sortedList.add(account); 
      } 
     } 
    } 
+0

thanx爲迴應...我希望我可以避免這種表現..因爲大多數時候不是很少的ID .. – Julia

2

您可能需要使用Criteria及其addOrder

事情是這樣的:

DetachedCriteria cr = DetachedCriteria.forClass(entityClass); 
//Add expressions or restrictions to your citeria 
//And add your ordering 
cr.addOrder(Order.asc("yourID")); 
List<T> ls = getHibernateTemplate().findByCriteria(cr); 
return ls; 
+0

比你的迴應,但是,即時通訊不捕捉如何定義這個其他編號順序,我以前在哪裏定義什麼是「yourId」,這是不同於簡單的ID?感謝名單! – Julia

+0

因爲我不知道你的'entityClass',所以我通常使用這些術語。通過'entityClass'我指的是你聲明爲「@ Entity」的類,即你想從表中檢索一些數據的類。 'yourId'我的意思是你想根據它進行排序的屬性。 –

+0

好吧,我認爲你是這麼說的,但這意味着你不太明白我需要什麼,不存在我想要排序的財產。我希望它按照我在查詢中寫入這些IDS的方式進行排序:)或將ID傳遞給IN()子句....但是,似乎它不可能。 – Julia

0

這是不可能通過OR QueryRestrictions.in()提供任何實體獲取結果。正如您在開啓這種查詢時所遇到的情況一樣,它會以明智的方式搜索結果。所以它只會讓你的結果更加明智。您可以使用標準在asc或desc中更改順序。如果您想要輸入結果,請輸入第二個答案是唯一的選擇。

0

您只能按查詢返回的列值按數據類型定義的順序進行排序。預先訂購您提供的ID並不是更好,並且通過ID對查詢結果進行排序,以便它們以相同的順序出現?

+0

對不起,但是,我仍然按照這種方式讓它們按對象ID排序,我不知道我以那種方式獲得了什麼?或者我錯過了你的觀點。 – Julia