在 Grails 3.2.10 中按日期(年、月、日)显示结果的命名查询

Named query to show results by date (Year, month, day) in Grails 3.2.10

给定这个域:

class Burger{
  String description
  Date dateCreated
}

目前,我有这个 namedQuery

queryOnDateCreated {Date dateArgument ->
        eq 'dateCreated', dateArgument
}

我需要一个查询,它允许我找到域 Burger 中具有特定创建日期的所有对象,只考虑年、月和日(月的),而忽略小时、分钟、秒、毫秒。

经过一些额外的研究,我找到了一个解决方案,我将分享它以防它对其他人有帮助:

命名查询需要如下:

queryOnDateCreated {Date dateArgument ->
    def dateArgumentIntervalEnd = DateUtils.addMilliseconds(dateArgument + 1, - 1)
    between 'dateCreated', dateArgument, dateArgumentIntervalEnd
}

说明:

"between" 条件 returns 域中日期在给定时间间隔之间的每个对象。

由于 dateArgument 是一个只用年月日创建的日期,它的时间应该是 00:00:00:000(一天的第一时刻)。

此外,"dateArgument + 1"保存的是第二天(同一时间)的值,所以需要减去1毫秒,这样"dateArgumentIntervalEnd"会保存第二天的值"dateArgument" 的年月日相同,但时间将 23:59:59:999 保持一整天的间隔。