【发布时间】:2017-12-07 00:16:19
【问题描述】:
让我们假设以下 Grails 域:
Owner {
String name
static hasMany [cars: Cars]
}
Car {
Date inspectionDate
}
我希望能够通过条件搜索Owners,并遵循以下规则:Owner 的汽车列表中inspectionDate 的最新Car低于*given date*。
例如,我想将以下代码应用于 GORM 中的选择查询:
queryResultsList = allOwnersList.filter { owner ->
owner.cars.min{ car -> car.inspectionDate }.inspectionDate < myDate
}
我需要使用 Criteria 来实现它,因为我已经在其他字段上过滤 Owners。
给出的全部代码仅作为示例,部分原代码已被省略,源代码与汽车和车主无关。
一开始我以为我需要SQL 中的子查询来按预期检索我的数据,我尝试了以下操作:
Owner.createCriteria().list {
// [...] some filters on other fields
cars {
lt('inspectionDate', params.inspectionDate)
'in'('inspectionDate', new grails.gorm.DetachedCriteria(Owner).list {
projections {
cars {
min('inspectionDate')
}
}
})
}
}
我还尝试在投影的不同位置添加groupProperty,以MissingPropertyException结尾。
我正在使用 Grails 2.2.4
【问题讨论】:
标签: mysql grails grails-orm criteria