2011-10-13 20 views
0


我有以下結構...排序依據和一對多 - 關係 - 條件查詢使用JPA 2.0

Entity A 
    - ... 
    - Collection<B> c (@OneToMany) 

Entity B 
    - ... 
    - Date d 

我希望QueryResult中由日期d通過在排序依據,聲明,責令我CriteriaQuery中。我怎樣才能做到這一點?

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<A> cq = cb.createQuery(A.class); 
Root<A> r = cq.from(A.class); 
cq.select(r); 

// orderBy-Statement -> cq.orderBy(cb.desc(r.get("c.d")).as(Date.class))); 
// Error: javax.servlet.ServletException: javax.ejb.EJBException: java.lang.IllegalArgumentException: Unable to resolve attribute [c.d] against path 

List<A> l = em.createQuery(cq).getResultList(); 

是否有可能在查詢中排序? 如果不是,我應該寫一個方法來訂購我的resultList,對吧?

回答

0

那麼,總而言之,我無法弄清楚如何使用orderBy-Statement我想要的。但現在我很滿意的替代方法(在我看來甚至更好的!):

  1. 從數據庫(無序)
  2. 創建數據模型,並在GUI中使用它抓取所需要的數據
  3. 做的數據模型/ GUI

順便提一下排序/排序:我使用的是Primefaces.org框架。爲我節省了很多工作^^

0

這個呢?

cq.orderBy(cb.desc(r.get("c").get("d")));