我正在尝试对数据表进行排序。我有以下域名(释义和示例):
class Car {
Engine engine
static constraints = {
engine nullable: true // poor example, I know
}
}
class Engine {
String name
}
这是处理排序的控制器操作:
def myAction = {
def list = Car.findAll(params)
render(view: 'list', model: [list: list])
}
我提供了一些数据,这些数据有几个Cars,一些有空引擎,另一些有非引擎的引擎。
我尝试以下查询:
http://www.example.com/myController/myAction?sort=engine.name&order=asc
查询的结果仅返回引擎不为空的Car条目。如果我只查询关联(没有其属性),那么与结果将会返回>>
http://www.example.com/myController/myAction?sort=engine&order=asc
将返回所有Car结果,将具有空引擎的结果分组。
有没有办法:
list()
的内置排序来实现这些结果(即不使用Criteria或HQL查询)答案 0 :(得分:3)
您需要在查询中指定LEFT_JOIN,请尝试:
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)
}
}
请记住在list.gsp
中将engine.name作为要订购的属性<g:sortableColumn property="engine.name" title="Engine Name" />