2013-07-23 51 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 = ....”并且它不喜欢那样。 –