Mysql 子查询中的GORM条件分组依据

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 -

让我们假设以下Grails域:

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] })
    }
}