Grails - 按域关系属性排序(使用createCriteria())

时间:2010-08-01 18:34:30

标签: hibernate grails gorm grails-domain-class

我有两个域关系: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)
}

有没有办法按关系属性对域类数据进行排序?

感谢您的重播,

圣马特奥

4 个答案:

答案 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)

    }