让我们假设以下Grails域:
Owner {
String name
static hasMany [cars: Cars]
}
Car {
Date inspectionDate
}
我希望能够通过条件搜索Owner
s ,并遵循以下规则: Car
中的inspectionDate
Owner
{ {1}}的汽车列表低于*given date*
。
作为示例,我想将以下代码应用于GORM中的选择查询:
queryResultsList = allOwnersList.filter { owner ->
owner.cars.min{ car -> car.inspectionDate }.inspectionDate < myDate
}
我需要使用Criteria来实现它,因为我已经在其他字段上过滤Owner
了。
以整个给定的代码为例,原始代码的某些部分已被省略,源代码不是关于汽车和所有者。
首先想到我认为我需要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
答案 0 :(得分:0)
经过几天测试解决方案后,我来到了以下方面:
#panel
然而,我仍然觉得做错了。特别是,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] })
}
}
部分看起来像代码气味。
我发布这个是因为它做了我需要的事情,但是对于找到好的解决方案的任何帮助都将不胜感激。