【问题标题】:HQL - Hibernate: How to get all records where day of endDate equals todayHQL - Hibernate:如何获取 endDate 的日期等于今天的所有记录
【发布时间】:2021-12-01 18:12:32
【问题描述】:

获取endDatetoday 具有相同日期、月份和年份的所有记录的最佳方法是什么?

我尝试了多种实现方式,例如:

select i from Items i where day(i.endDate) = day(:today)
//today = ZonedDateTime.now()

这里的问题是,上面的查询将检索同一天的所有日期以及同一天(例如:第 20 天)但月份/年份不同的日期。

在互联网上搜索了一段时间后,我还没有找到一个好的解决方案。有没有人实现过这个并且可以解释一个解决方案?

谢谢

【问题讨论】:

    标签: hibernate repository hql


    【解决方案1】:

    通常,这可以通过使用 date_trunc 函数来完成,但由于 Hibernate 对此函数没有抽象,最简单的方法是使用带正确开始和结束日期的 between 谓词:

    LocalDateTime firstOfMonth = LocalDate.now().withDayOfMonth( 1 ).atStartOfDay();
    entityManager.createQuery("select i from Items i where i.endDate between :startDate and :endDate", Items.class)
      .setParameter("startDate", firstOfMonth)
      .setParameter("endDate", firstOfMonth.plusMonths( 1 ).minus( 1, ChronoUnit.SECONDS ))
    

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多