【问题标题】:How do I write a JPA criteria query to find an object in a date range and include the endpoints of that date range?如何编写 JPA 条件查询以查找日期范围内的对象并包含该日期范围的端点?
【发布时间】:2016-04-07 19:26:44
【问题描述】:

我正在使用 JPA 2.1 和 Hibenrate 5.1.0.Final。如何编写 JPA CriteriaBuilder 查询,在该查询中查询日期范围内的对象,并且我想在查询中包含日期范围的端点?我注意到下面的代码

final java.util.Date searchDate = objectDate.toDateTimeAtStartOfDay().toDate();
    final ParameterExpression<Date> d = builder.parameter(Date.class);
    query.where(
            …
            builder.between(d, objectRoot.<Date>get(MyObject_.objectDate), objectRoot.<Date>get(MyObject_.objectEndDate)));

如果条件恰好落在其中一个端点上,则此查询不会返回任何结果。

【问题讨论】:

  • lessThanOrEqualTo,greaterThanOrEqualTo?除此之外,您必须发布生成的 SQL,因为在不发布 SQL 的情况下调试这样的事情有点毫无意义
  • 来吧,尼尔,你不需要看 SQL 来理解这个问题。 “之间”不包括端点,这在他们的文档中。我想包括端点。听起来 lessThanOrEqualTo,greaterThanOrEqualTo 是这里的答案。

标签: hibernate date jpa range jpa-2.1


【解决方案1】:

有关日期字段的问题几乎总是与时间部分有关。由于 searchDate 是日期开始的时间(DD-MON-YY 12:00am),与 BETWEEN 的低端进行比较时,由于时间差异,可能不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多