2013-07-23 55 views
0
public List<T> findRange(int start, int duration) { 
    Session hibernateSession = this.getSession(); 
    List<T> results = null; 
    try { 
     hibernateSession.beginTransaction(); 
     Query q = hibernateSession.createQuery("From " + type.getSimpleName()); 
     q.setFirstResult(start); 
     q.setMaxResults(duration); 
     results = q.list(); 
     hibernateSession.getTransaction().commit(); 
    } finally { 
     hibernateSession.close(); 
    } 
    return results; 
} 

我已經在上面的查詢從數據庫中,我得到了某行的範圍,我需要找回他們下令對jobStatus列,而不是字母或數字,但有以下重要意義:Hibernate的自定義排序查詢

case "Open": 
    return 1; 
    break; 
case "On Hold": 
    return 2; 
    break; 
case "Offer Extended": 
    return 3; 
    break; 
case "Closed": 
    return 4; 
    break; 

我哪有那麼,如果我想行10至20日,我在這個順序從表中檢索他們返工這個Hibernate查詢?

回答

0

要做到這一點,我認爲你不會得到任何不足;

Query q = hibernateSession.createQuery("FROM " + type.getSimpleName() + 
      " ORDER BY CASE WHEN jobStatus='Open'   THEN 1 " + 
          "WHEN jobStatus='On Hold'  THEN 2 " + 
          "WHEN jobStatus='Offer Extended' THEN 3 " + 
          "WHEN jobStatus='Closed'   THEN 4 " 
          "ELSE 5 END, id"); 
+0

謝謝!我正在嘗試「ORDER BY'jobStatus'CASE WHEN = ....」並且它不喜歡那樣。 –