如何将对象排序到存储桶中表示为有效的 JPQL 表达式?

2024-03-08

我想显示一个 2D 图表,其中包含给定时间跨度内处理的对象数量(映射在 JPA 中)。在 30 分钟的时间内,这个数量可以扩展到大约 30k 个对象。

作为一名 DBMS,我在 4.2.21 版中使用 PostgreSQL 9.4 和 JPA 2.0 以及 Hibernate。

目前,我正在使用这段代码,以便将金额添加到我的临时“桶”中。

 // Get all objects after a given start date
List<MyObject> myObjects= myJPADbService.getMyObjects(Date.from(startDate.atZone
            (ZoneId.systemDefault()).toInstant()), Integer.MAX_VALUE);

for (MyObject information : myObjects) {
        LocalDateTime pageDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(information.getLastSeen().getTime()), ZoneId.systemDefault());          
    long duration;
    if (temporalUnit == ChronoUnit.MINUTES) {
     duration = Duration.between(startDate, pageDate).toMinutes();
    } else if (temporalUnit == ChronoUnit.DAYS) {
     duration = Duration.between(startDate, pageDate).toDays();
    } else {
     duration = Duration.between(startDate, pageDate).toHours();
   }

  pagesPerUnit[(int) (Math.abs(duration))]++;
}

然而,根据用户选择的时间跨度,这段代码可能效率非常低。如果 DBMS 根据用户选择的时间跨度计算存储桶,可能会更有效。

如何用正确的 JPQL 语法来表达这一点?


首先,您需要一种 JPA 方式来计算之间的差异startDate and pageDate在各自的单元中,这有点难以制定,因为它非常依赖于数据库。最后,您将需要一些自定义函数或编写非常复杂的 JPQL 查询。

在 PostgreSQL 中计算两个日期之间的天数就像这样做一样简单date_part('day', t2 - t1)。对于您已经需要的时间date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)和分钟date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1).

为了在 JPQL 中使用这些数据库函数,您可以使用FUNCTION语法类似FUNCTION('date_part', 'day', :startDate - pageDate).

最后,您将按这样的表达式进行分组并按 id 进行计数,如下所示

SELECT COUNT(o.id) FROM MyObject o GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)

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

如何将对象排序到存储桶中表示为有效的 JPQL 表达式? 的相关文章

随机推荐

  • 使用媒体流扩展 (MSE) 显示 getUserMedia Stream 实时视频

    我正在尝试使用 getUserMedia 显示从网络摄像头获取的 MediaStream 并使用任何可能播放的机制将其中继到远程对等点 作为实验 我没有直接使用 webRTC 因为我想控制原始数据 我遇到的问题是我的视频元素不显示任何内容
  • Bash 布尔测试

    如果一个标志设置为 true 而另一个标志设置为 false 我将尝试运行一段代码 IE var1 true var2 false if var1 var2 then var2 something fi 由于这没有按照我预期的方式进行评估
  • 使用 AutoMapper 映射分组集合

    我有以下代码不起作用 var groupedZones this zoneDataManager GetZonesGroupedByCountry IEnumerable
  • 无法获取 Master Kerberos 主体以用作 Talend Batch 作业的续订者

    我们正在尝试使用 talend 批处理 spark 作业来访问 Kerberos 集群中的配置单元 但我们收到以下 无法获取主 Kerberos 主体以用作更新程序 错误 通过使用 talend 中的标准作业 非 Spark 我们可以毫无问
  • 如何删除 UIToolBar 上的顶部边框

    我已将 UIToolBar 色调颜色设置为某个值 并且我看到了要删除的边框线 如何去掉这个黑色边框 gt 你可以这样做 self navigationController toolbar clipsToBounds YES
  • d3 按路径制作动画组

    这是我要增强的下一个问题原问题 https stackoverflow com questions 64954518 d3 animate path by arc 64954839 所以我正在尝试的是沿着填充路径为三角形标记和文本工具提示设
  • JNI char[](char数组)的方法描述符是什么?

    我的 JAVA 类代码片段 我想使用 JNI 从我的 C 文件访问 getReg chal 方法 public char getReg chal return reg chal 我的 C 文件执行一些 jni 操作 mid env gt G
  • Facebook 登录窗口在屏幕旋转时关闭

    我已经在我的应用程序中实现了 facebook 登录过程工作正常 当我点击 Facebook 图像时 它会打开 Facebook 登录窗口 但是当我旋转模拟器时 它会关闭登录窗口 任何解决方案 将其添加到您的活动的清单文件中 android
  • Sequelize 测试 - 有时会出现验证错误

    我正在通过 Mocha Chai 对续集定义运行单元测试 如下所示 运行的主要tests jsmocha tests js Testing Dependencies expect require chai expect should req
  • 在 netfilter 挂钩中查找发送数据包的可执行文件的名称

    我正在编写一个内核模块 它使用 netfilter 挂钩来过滤 TCP 数据包 并且需要找出发送数据包的可执行文件的路径 到目前为止 我已经使用了以下方法 但它打印的名称似乎与所使用的可执行文件无关 usr lib firefox fire
  • 如何模拟 aws-sdk gem?

    我有一些代码可以使用以下命令将文件上传到 Amazon S3aws sdk宝石 显然它执行了一个 HTTP put 来上传文件 有没有一种好方法来模拟 aws sdk gem 的此功能 我尝试使用 Webmock 但是 aws sdk ge
  • 如何忽略 Git 合并中的文件?

    我正在开发一个有两个分支的 Django 网站 master and dev master是生产版本 不应直接在此处完成任何工作 所有的改变都应该来自合并dev分支 一旦被认为是稳定的 dev正如您可能猜到的那样 是开发分支 所有更改都在这
  • ViM-LaTeX、python 和 Mac OS 10.8.1 以及一个奇怪的错误

    我刚刚将我的机器更新到 Mountain Lion 10 8 1 并尝试安装 vim latex 我已经每天使用该套件大约 5 年了 但是当尝试进行全新安装并打开 tex 文件时 我收到以下错误消息 UnitCircleAnalysis t
  • 提取模式后的值

    一个初学者的问题 我有一个这样的列表 x lt c aa v12 bb x21 cc f35 xx r53 bb g 25 yy h48 nn u75 bb 26 gg m98 但还有更多行 我需要提取 bb 和 之间的内容 IE 我想 x
  • 父类可以调用子类方法吗?

    参考here https stackoverflow com questions 1385895 accesing a function via string stored in hashtable A是预编译的Java类 我也有源文件 B
  • OSMDroid 从资产文件夹加载自定义离线图块

    我想知道是否可以做这样的事情 我知道需要修改一些现有代码才能实现这一目标 但我想知道是否有人知道在哪里查看以及如何执行此操作 我在地图上的特定区域放置了一些自定义图块 作为 OSM 图块提供程序的替代品 但需要将它们存储在 assets 文
  • 将 JSON 转换为 Python 对象:如何处理 DateTime 转换?

    我有一个 C 控制台应用程序 可将 POCO 类序列化为 JSON 字符串 我使用 JSON Net 进行序列化 此应用程序中的 JSON 被转储到文件中 并由 Python 2 7 脚本读入 问题就在这里 JSON 序列化获取我的类上的所
  • 如何使用curl和PHP设置自定义请求标头键?

    我使用curl 和php 上传文件 我需要帮助来设置自定义请求标头键 例如 X Filename blahblah zip X Filesize 2677 X Filetype application zip 您必须使用curl setop
  • 如何修改 OpenXML TableCell 的前景色和背景色?

    我正在创建表格单元格 如下所示 private static TableCell GetHeaderCell string cellText var tc new TableCell new Paragraph new Run new Te
  • 如何将对象排序到存储桶中表示为有效的 JPQL 表达式?

    我想显示一个 2D 图表 其中包含给定时间跨度内处理的对象数量 映射在 JPA 中 在 30 分钟的时间内 这个数量可以扩展到大约 30k 个对象 作为一名 DBMS 我在 4 2 21 版中使用 PostgreSQL 9 4 和 JPA