Hibernate 使用Grails中的条件对多个字段进行排序
我有以下查询,我想通过“raceDate”和“raceNo”asc进行排序。我能想出如何按一个字段排序,但不能按两个字段排序,有什么想法吗Hibernate 使用Grails中的条件对多个字段进行排序,hibernate,grails,groovy,controller,criteria,Hibernate,Grails,Groovy,Controller,Criteria,我有以下查询,我想通过“raceDate”和“raceNo”asc进行排序。我能想出如何按一个字段排序,但不能按两个字段排序,有什么想法吗 def list = { params.max = Math.min( params.max ? params.max.toInteger() : 20, 100) params.offset = params?.offset?.toInteger() ?: 0 params.sort = "raceDat
def list = {
params.max = Math.min( params.max ? params.max.toInteger() : 20, 100)
params.offset = params?.offset?.toInteger() ?: 0
params.sort = "raceDate"
params.order = params?.order ?: "asc"
def results = Race.createCriteria().list(
max: params.max,
offset: params.offset,
sort: params.sort,
order: params.order
) {
and {
if (params.raceNo && params.raceNo != '')
eq("raceNo", params.raceNo.toInteger())
if (params.country && params.country != '')
eq("country", params.country)
if (params.venue && params.venue != '')
eq("venue", params.venue)
if (params.raceType && params.raceType != '')
eq("raceType", params.raceType)
if (params.surface && params.surface != '')
eq("surface", params.surface)
if (params.officialGoing && params.officialGoing != '')
eq("officialGoing", params.officialGoing)
if (params.raceDateStart_year && params.raceDateStart_month && params.raceDateStart_day
&& params.raceDateEnd_year && params.raceDateEnd_month && params.raceDateEnd_day) {
String startInput = "${params.raceDateStart_year}/${params.raceDateStart_month}/${params.raceDateStart_day}"
Date startDate = jodaFormatter.parseDateTime(startInput).toDate();
String endInput = "${params.raceDateEnd_year}/${params.raceDateEnd_month}/${params.raceDateEnd_day}"
Date endDate = jodaFormatter.parseDateTime(endInput).toDate();
between("raceDate", startDate, endDate)
}
}
}
[ raceInstanceList:results, raceInstanceTotal:results.totalCount, params:params ]
}
像这样的方法应该会奏效:
def results = Race.createCriteria().list(
max: params.max,
offset: params.offset,
sort: params.sort,
) {
order('raceDate', 'asc')
order('raceNo', 'asc')
and {
if (params.raceNo && params.raceNo != '')
eq("raceNo", params.raceNo.toInteger())
...
这不起作用,并引发错误:列“table.RaceNo”在ORDER BY子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。我认为您的示例可以简化一点。类Foo{String name int age}然后问,如何使用GORM标准先按姓名排序,然后按年龄排序?[已在此处回答][1][1]: