我有两个域关系:1:n关系:
import Action
class Task {
Action actionParent
String taskName
}
和
class Action {
String actionName
}
我有任务列表,其中我有“操作名称”列,我想通过Action.actionName对此列进行排序。现在我正在使用createCriteria()方法[我需要使用它,因为我有更多的逻辑用于过滤和排序...],但我只能按“Action.id”进行排序。此方法如下所示:
def criteria = Task.createCriteria();
taskList = criteria.list {
if(parameters.max != null)
maxResults(parameters.max)
if(parameters.offset != null)
firstResult(new Integer(parameters.offset))
if(parameters.sort != null && parameters.order)
order(parameters.sort, parameters.order)
}
有没有办法按关系属性对域类数据进行排序?
感谢您的重播,
圣马特奥
答案 0 :(得分:4)
如果您想坚持使用标准方法,请尝试这样的方法。为您创建Action对象的别名,然后访问该属性以对其进行排序
def criteria = Task.createCriteria()
def taskList = criteria.list {
createAlias("actionParent","_action")
order( "_action.actionName")
}
答案 1 :(得分:2)
您是否尝试过使用listOrderBy * GORM命令,因此它类似于
def tasksList = Task.listOrderByActionName()
答案 2 :(得分:2)
我知道这是一个老问题,但在我的特殊情况下(想要对关联的关联字段进行排序),只有当我将排序列直接传递给list方法时才有效:
def criteria = Task.createCriteria();
taskList = criteria.list(max: parameters.max, offset: parameters.offset, sort: parameters.sort, order: parameters.order) {
// Other code here...
}
当我试图将排序信息放入闭包本身时,Hibernate通过消息org.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain]
来禁止异常。
答案 3 :(得分:2)
试试这个
def tasksList = Task.findAll()
tasksListSorted = tasksList.sort { it.actionParent.actionName }
你也可以这样做
tasksList.sort{
task1, task2 -> task1.actionParent.actionName.compareToIgnoreCase(task2.actionParent.actionName)
}