Grails - 查找日期范围重叠的位置

wrs*_*der 3 grails grails-orm

我有一个带有startDate和endDate属性的Grails域对象.

查找范围[startDate,endDate]与指定日期范围重叠的所有对象的最佳方法是什么?我知道如何在SQL中做到这一点,但想知道是否有任何Grails/GORM魔术更简洁地做到这一点.

此外,endDate是一个可选属性.

SQL/JPQL查询类似于

from MyObject obj where obj.startDate <= ?1 and (obj.endDate is null OR obj.endDate >= ?2)
Run Code Online (Sandbox Code Playgroud)

dma*_*tro 7

在这种情况下,有两种方法可以接受Grails/GORM:

懒:-

def today = new Date()
def query = MyObject.where {
    startDate <= (today - 10) && (endDate == null || endDate >= today + 10)
}
def listOfMyObjects = query.list()
Run Code Online (Sandbox Code Playgroud)

急于:-

def today = new Date()
def listOfMyObjects = MyObject.findAll {//or find{} if you need the first occurance
    startDate <= (today - 10) && (endDate == null || endDate >= today + 10)
}
Run Code Online (Sandbox Code Playgroud)

  • 渴望正是我所寻找的.Grails/GORM是否足够智能,可以将其转换为SQL WHERE,还是只是将整个列表拉到内存中? (2认同)