JPA CriteriaBuilder - 按一对多关系中关联实体的数量排序

2024-01-03

我有两个处于一对多关系的实体“客户”和“订单”。 对于每个客户,我需要计算关联订单的数量,并按该数量对结果进行排序。 在本机 postgres 查询中,它看起来像这样:

select cust.id, count(order.id) from customers cust
left outer join orders order
on cust.id = order.customer_id
where .... conditions ...
group by cust.id
order by count desc;

但我必须使用 CriteriaBuilder 来执行此操作,因为此查询是使用 CriteriaBuilder 放入附加条件的较大代码段的一部分。在 Hibernate 中我可能会使用 Projections,但我在 JPA 中找不到类似的东西。

对于使用 CriteriaBuilder 编写查询的任何帮助,我们将不胜感激。

先感谢您。


假设实体 Customer 有一个OneToMany像这样的属性:

@OneToMany(mappedBy = "customerId")
private Collection<Order> orders;

您可以使用以下查询:

EntityManager em;  // to be built or injected
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();
Root<Customer> customer = cq.from(Customer.class);
CollectionJoin<Customer, Order> orders = customer.join(Customer_.orders, JoinType.LEFT);
cq.select(cb.tuple(customer, cb.count(orders)));
cq.where(... add some predicates here ...);
cq.groupBy(customer.get(Customer_.id));
cq.orderBy(cb.desc(cb.count(orders)));
List<Tuple> result = em.createQuery(cq).getResultList();
for (Tuple t : result) {
    Customer c = (Customer) t.get(0);
    Long cnt = (Long) t.get(1);
    System.out.println("Customer " + c.getName() + " has " + cnt + " orders");
}

上述方法使用元模型 http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/。如果不喜欢可以更换Customer_.orders with "orders" and Customer_.id with "id".

If the OneToMany属性是另一种类型,替换CollectionJoin具有正确类型的集合(ListJoin, SetJoin, MapJoin).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA CriteriaBuilder - 按一对多关系中关联实体的数量排序 的相关文章

随机推荐

  • 如何像 jsfiddle.net 中那样调整多个相邻文本区域的大小?

    如何像jsfiddle net网站那样通过在区域1 2和3上拖动鼠标来调整textarea的大小 我的代码是 HTML div fieldset div class window top A div div class handler ho
  • 正则表达式仅匹配字符串以目标结尾的情况

    我需要一个正则表达式 它仅与以我要查找的目标结尾的字符串匹配 我需要找到具有特定扩展名的文件 问题是该扩展名也出现在其他文件中 例如我有两个文件名为 B82177 2014 07 08T141507758Z ccf and B82177 2
  • iPhone SDK WebRTC 集成错误

    安装时WebRTC我的 iOS 项目出现以下错误 Undefined symbols for architecture i386 OBJC CLASS RTCICECandidate referenced from objc class r
  • 没有 if-else 语句的一维卷积(非 FFT)?

    我编写了一个简单的串行一维卷积函数 如下 我也在尝试 GPU 卷积实现 这主要是出于我自己的好奇心 我正在尝试了解各种非 FFT 实现策略之间的性能权衡 避免分支对于我的 GPU 卷积实验非常重要 因为分支在 Nvidia GPU 上的成本
  • JavaScript 中的二进制到字符串

    我创建了一个 JavaScript 程序来将字符串转换为二进制 Input StackOverflow Output 1010011 1110100 1100001 1100011 1101011 1001111 1110110 11001
  • 将图表添加到 d3 中的工具提示

    我正在尝试向我的工具提示添加一个简单的条形图 它由两个变量组成 男性和女性 我希望有人能够帮助我将其放入工具提示中 而不是将其附加到当前附加的位置 我已经给了它一个要附加的特定区域 以便我知道它实际上正在显示 确实如此 但我不知道如何将其放
  • 使用 Python 请求选择表单

    我想使用一个能够填写表单和处理重定向的 python 库 主页 页面有一个表单 username user password pass 重定向 页面将我带到一个新页面 新 页面有一个指向最终页面的链接 最终 页面有一个表单 Field 1
  • cygwin - 无法执行二进制文件

    我正在尝试从我的 C 代码运行这两个 data 文件来完成我的作业 我已获得所有文件 并且仅用于实现程序的一些功能 所有内容都应该能够运行 make 命令进行编译 我以前运行的是 MAC 只是刚刚开始使用 Windows win 7 因为工
  • 通过 Node js 进行 ffmpeg mp3 流传输

    var fs require fs var child require child process var http require http var input file fs createReadStream remo mp3 http
  • 如何去除html中点击按钮周围的边框?

    我最近开始建立一个网站 并开始在上面制作按钮 但是 每当我单击该按钮时 我都会看到一个蓝色边框 例如this https i stack imgur com 6TGIX jpg 我应该如何摆脱这个边界 提前致谢 将此 css 添加到您的按钮
  • 移动屏幕锁定时广播接收器不会触发

    当我安装该应用程序时 一切正常 每次发送消息时 我都可以打印消息正文 直到锁定手机屏幕 之后 应用程序停止打印传入消息 我尝试了很多方法来克服这个问题 但没有成功 请帮我 public class SmsReceiveActivity ex
  • Polymer 1.0 观察者 - 不在数组上工作

    我设置了一个观察者来捕获数组属性上的所有聚合物识别事件 但我捕获它来捕获更改 在下面的示例中 我的观察者函数 bigup 仅在属性 bigs 首次初始化时才会被调用
  • Xcode 中两个具有重复符号的静态库

    我有两个静态库 它们似乎有重复的符号 TBXML o 并且无法编译 ld duplicate symbol OBJC METACLASS TBXML in Users Hoya Desktop SocialSync include SMUF
  • 使用 Android 手机作为 wifi 网络服务器

    我有一个疯狂的想法 我不知道是否可能 我想做的是将我的手机设置为wifi接入点 然后允许人们连接到它 但自己处理所有传入的http流量 So 手机 wifi 处于接入点模式 开放 wifi 网络 这个花絮有效 是的 我知道它没有得到官方支持
  • Silverlight MSBuild 任务 - Xap 复制到 ClientBin 后执行命令行

    我有一个silverlight项目安排如下 Examples Silverlight Bin Debug ExampleCode 多个子目录 Silverlight Web Bin Debug ClientBin Silverlight W
  • 由于 require-from-string,使用 npm 安装 Angular 时出错

    由于我无法安装 Angular 如何解决此错误 请参阅以下异常 C Users absin node gt npm install g angular cli npm ERR code ETARGET npm ERR notarget No
  • 在 Xcode 终端中运行时找不到“Cordova/CDVViewController.h”文件

    因此 当我尝试从 xcode 终端构建代码时 它失败了 并给出了 Cordova CDVViewController h 文件未找到的错误 但是当我从 xcode 构建此代码时 它构建得很好 在我的 Xcode 中 我已经完成了整个 Cor
  • 如何在 Spring Boot 2 中禁用管理端口的安全性

    我有 执行器 端点 在我的例子中manage 在端口 6565 上 是否可以仅针对特定端口禁用 Spring Boot 2 中的安全性 目前我只能将某些路径排除在安全之外 如果我现在在 manage 下的主应用程序端口 1337 下运行 E
  • Python 中字符串中的所有其他字母都大写吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在尝试定义一个函数 它将大写所有其他字母 并考虑空格 例如 print function name Hello world 应该打印
  • JPA CriteriaBuilder - 按一对多关系中关联实体的数量排序

    我有两个处于一对多关系的实体 客户 和 订单 对于每个客户 我需要计算关联订单的数量 并按该数量对结果进行排序 在本机 postgres 查询中 它看起来像这样 select cust id count order id from cust