orderBy和OneToMany-Relation - 使用jpa 2.0进行条件查询

时间:2011-10-13 10:20:59

标签: sql-order-by jpa-2.0 criteria-api


我有以下结构...

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

Entity B
  - ...
  - Date d

我希望在我的criteriaQuery中通过orderBy-Statement按日期排序queryResult。我怎样才能做到这一点?

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,对吗?

2 个答案:

答案 0 :(得分:0)

好吧,总而言之,我无法弄清楚如何使用我想要的orderBy-Statement。但是现在我对另一种方法感到满意(在我看来,这是一种更好的方法!):

  1. 从数据库中获取所需数据(无序)
  2. 创建数据模型并在GUI中使用
  3. 在datamodel / GUI上进行排序/排序
  4. 顺便说一下:我正在使用Primefaces.org框架。为我节省了大量的工作^^

答案 1 :(得分:0)

这个怎么样?

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