2011-10-13 22 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")));