Mysql 子查询中的GORM条件分组依据
让我们假设以下Grails域:Mysql 子查询中的GORM条件分组依据,mysql,grails,gorm,criteria,Mysql,Grails,Gorm,Criteria,让我们假设以下Grails域: Owner { String name static hasMany [cars: Cars] } Car { Date inspectionDate } 我希望能够通过条件搜索车主s,规则如下:车主的车辆列表中的检查日期低于*给定日期* 例如,我想将以下代码应用于GORM中的select查询: queryResultsList = allOwnersList.filter { owner -> owner.cars.min{ car -
Owner {
String name
static hasMany [cars: Cars]
}
Car {
Date inspectionDate
}
我希望能够通过条件搜索车主
s,规则如下:车主的车辆列表中的检查日期
低于*给定日期*
例如,我想将以下代码应用于GORM中的select查询:
queryResultsList = allOwnersList.filter { owner ->
owner.cars.min{ car -> car.inspectionDate }.inspectionDate < myDate
}
我还尝试在投影的不同位置添加groupProperty
,以MissingPropertyException
结束
我正在使用Grails 2.2.4在对解决方案进行了几天的测试之后,我得出了以下结论:
Owner.createCriteria().list {
// [...] some filters on other fields
cars {
lt('inspectionDate', params.inspectionDate)
'in'('inspectionDate', Owner.createCriteria().list {
projections {
cars {
min('inspectionDate')
}
groupProperty 'id'
}
// this allows to only get first property, which is inspectionDate
}.collect { it[0] })
}
}
不过,我还是觉得自己做错了事情。特别是,collect
部分看起来像是代码气味
我之所以发布这篇文章,是因为它满足了我的需要,但如果能帮我找到一个好的解决方案,我们将不胜感激
Owner.createCriteria().list {
// [...] some filters on other fields
cars {
lt('inspectionDate', params.inspectionDate)
'in'('inspectionDate', Owner.createCriteria().list {
projections {
cars {
min('inspectionDate')
}
groupProperty 'id'
}
// this allows to only get first property, which is inspectionDate
}.collect { it[0] })
}
}