2013-04-22 18 views
0

我嘗試按一個字段排序,但我在sql-debugger中看到sql不包含order-clause。CriteriaQuery無序

我的標準代碼是

GenericDaoImpl<T> { 
    CriteriaBuilder cb = em.getCriteriaBuilder(); 
    CriteriaQuery<T> cq = getCriteriaQuery(cb); 
    Root<T> entity = getRoot(cq); 
    cq.select(entity); 
    TypedQuery<T> q = em.createQuery(cq); 

    cq.orderBy(cb.asc(entity.get(order))); 

而且

public class GenericDaoClient extends GenericDaoImpl<Client> { 
    @Override 
    protected CriteriaQuery<Client> getCriteriaQuery(CriteriaBuilder cb){ 
      return (CriteriaQuery<Client>) cb.createQuery(Client.class); 
    } 

    @Override 
    protected Root<Client> getRoot(CriteriaQuery cq){ 
      return cq.from(Client.class); 
    } 

比我打電話給我的DAO得到有序列表:

dao.findAll(false,page*step+1,(page-1)*step+1,"conferm"); 

結果我的SQL查詢沒有按」沒有訂單條款:

select client0_.idCl as idCl218_ ... from Client client0_ limit ?, ? 
+0

「Client」類中使用的註釋是什麼? – harsh 2013-04-22 16:53:51

+0

此問題與JSF和RichFaces無關。 – 2013-04-22 17:05:31

+0

它與Hibernate無關。這是通用的JPA。 Hibernate可能(或可能不)是你的提供者,但你正在編寫的Criteria Queries只是基於JPA--沒有什麼特定的Hibernate。 – Mike 2013-04-22 19:03:45

回答

0

您可以在之前構建排序查詢,以設置order by子句。反向這兩條指令:

TypedQuery<T> q = em.createQuery(cq); 
cq.orderBy(cb.asc(entity.get(order)));