HQL - Hibernate:如何获取结束日期等于今天的所有记录
HQL - Hibernate: How to get all records where day of endDate equals today
获取 endDate
与 today
同日同月同年的所有记录的最佳方法是什么?
我尝试了多种实现方式,例如:
select i from Items i where day(i.endDate) = day(:today)
//today = ZonedDateTime.now()
这里的问题是上面的查询将检索同一天的所有日期以及同一天的日期(例如:第 20 天)但 month/year.
在网上找了一段时间,还没找到好的解决办法。有没有人以前实现过这个并且可以解释解决方案?
谢谢
通常,这可以通过使用 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 ))
获取 endDate
与 today
同日同月同年的所有记录的最佳方法是什么?
我尝试了多种实现方式,例如:
select i from Items i where day(i.endDate) = day(:today)
//today = ZonedDateTime.now()
这里的问题是上面的查询将检索同一天的所有日期以及同一天的日期(例如:第 20 天)但 month/year.
在网上找了一段时间,还没找到好的解决办法。有没有人以前实现过这个并且可以解释解决方案?
谢谢
通常,这可以通过使用 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 ))