Sorting 如何在Grails中按可空关联的属性排序?
我正在尝试对数据表进行排序。我有以下领域(解释并举例说明): 以下是处理排序的控制器操作:Sorting 如何在Grails中按可空关联的属性排序?,sorting,grails,associations,gorm,Sorting,Grails,Associations,Gorm,我正在尝试对数据表进行排序。我有以下领域(解释并举例说明): 以下是处理排序的控制器操作: def myAction = { def list = Car.findAll(params) render(view: 'list', model: [list: list]) } 我提供了一些数据,以便有几辆车,一些车的发动机为空,另一些车的发动机为非空 我尝试以下查询: http://www.example.com/myController/myAction?sort=engine
def myAction = {
def list = Car.findAll(params)
render(view: 'list', model: [list: list])
}
我提供了一些数据,以便有几辆车,一些车的发动机为空,另一些车的发动机为非空
我尝试以下查询:
http://www.example.com/myController/myAction?sort=engine.name&order=asc
查询结果仅返回引擎不为null的Car条目。这与仅查询关联(不查询其属性)时返回的结果不同:
它将返回所有的Car结果,将带有空引擎的结果分组在一起
有没有办法:
- 我可以得到按关联属性排序的查询,以返回与仅按关联排序的查询相同的结果(将空关联分组在一起)
- 我可以使用传递到
的内置排序来实现这些结果(即,不使用条件或HQL查询)list()
import org.hibernate.criterion.CriteriaSpecification
...
def list = Car.createCriteria().list ([max:params.max?:10, offset: params.offset?:0 ]){
if (params.sort == 'engine.name') {
createAlias("engine","e", CriteriaSpecification.LEFT_JOIN)
order( "e.name",params.order)
} else {
order(params.sort, params.order)
}
}
请记住将engine.name作为要在list.gsp中订购的属性
<g:sortableColumn property="engine.name" title="Engine Name" />
import org.hibernate.criterion.CriteriaSpecification
...
def list = Car.createCriteria().list ([max:params.max?:10, offset: params.offset?:0 ]){
if (params.sort == 'engine.name') {
createAlias("engine","e", CriteriaSpecification.LEFT_JOIN)
order( "e.name",params.order)
} else {
order(params.sort, params.order)
}
}
<g:sortableColumn property="engine.name" title="Engine Name" />