gpt4 book ai didi

java - (优雅地)在 JPQL 中查询匹配天数

转载 作者:行者123 更新时间:2023-11-30 09:45:44 25 4
gpt4 key购买 nike

在我的一个项目中,我遇到了以下情况:

我的“可用性对象”有一个开始日期 和一个结束日期。用户通过定义他们自己的日期范围来查询这些。

客户基本上希望输出所有可用性,并根据可用性日期范围和用户日期范围匹配的天数对它们进行排序。

例如,如果我有两个可用性,可用性 1 从 2012 年 1 月 1 日到 2012 年 1 月 31 日和 可用性 22012 年 1 月 1 日直到 2012 年 1 月 15 日 并且用户查询“Availabilities between 2012 年 1 月 1 日2012 年 1 月 31 日”,结果应该是:

Availability   | numberOfDaysMatching
Availability 1 | 31
Availability 2 | 15

在不对数据进行非规范化的情况下,我无法真正理解如何查询它。作为 Persistence API,我使用的是 Hibernate(我认为是 3.6ish)提供的 JPA。

现在我的解决方案是通过在每次存储/更新时计算它们并基本上将每一天存储在一个单独的表中来对可用性所在的天数进行非规范化。这样我就可以通过基本计算用户查询中的天数来查询想要的结果,在我的天数表中查找它们,然后查询其中一个天数为 IN(:mycalculateddays) 的可用性。

是否有一些简单的方法可以使用普通 JQPL 查询此数据,它不会像我那样对数据进行非规范化?

最佳答案

查询重叠范围本身当然很容易(假设范围有效(开始 <= 两者都结束):

SELECT r
FROM Range r
WHERE r.startDate <= :endDate and :startDate <= r.endDate

但是您不能构造计算两个日期之间差异的查询,因为 JPQL 不支持对日期进行算术运算。也没有内置函数可以提供帮助。

关于java - (优雅地)在 JPQL 中查询匹配天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com