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

发布于 2024-12-09 09:05:45 字数 731 浏览 0 评论 0原文


我有以下结构...

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

Entity B
  - ...
  - Date d

我希望 queryResult 通过 criteriaQuery 中的 orderBy-Statement 按日期 d 排序。我怎样才能实现这个目标?

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

I have the following structure...

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

Entity B
  - ...
  - Date d

I want the queryResult to be ordered by the Date d via an orderBy-Statement in my criteriaQuery. How can I achieve this?

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();

Is it possible to have the ordering in the query?
If not, i'm supposed to write a method for ordering my resultList afterwards, right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

娇妻 2024-12-16 09:05:45

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

  1. 从数据库中获取所需的数据(无序)
  2. 创建一个数据模型并在 GUI 中使用它对
  3. 数据模型进行排序/排序/ GUI

顺便说一句:我正在使用 Primefaces.org 框架。省去了我很多工作^^

Well, all in all I wasn't able to figure out how to use the orderBy-Statement I want. But Now I'm satisfied with an alternative approach (and in my opinion an even better one!):

  1. Fetching the needed data from the database (unordered)
  2. creating a datamodel and using it in the GUI
  3. doing the sorting/ordering on the datamodel/GUI

By the way: I'm using the Primefaces.org-framework. Saves me a lot of work^^

萌梦深 2024-12-16 09:05:45

这个呢?

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

What about this one?

cq.orderBy(cb.desc(r.get("c").get("d")));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文