3

我有两个具有 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

4 回答 4

5

如果您想坚持使用标准方法,请尝试这样的方法。为您的 Action 对象创建一个别名,然后访问该属性以对其进行排序

    def criteria = Task.createCriteria()
    def taskList = criteria.list {
        createAlias("actionParent","_action")
        order( "_action.actionName")
    }
于 2010-08-01T19:50:49.080 回答
4

我知道这是一个老问题,但在我的特殊情况下(想要对关联的关联字段进行排序),它仅在我将排序列直接传递给 list 方法时才有效:

def criteria = Task.createCriteria();
taskList = criteria.list(max: parameters.max, offset: parameters.offset, sort: parameters.sort, order: parameters.order) {
    // Other code here...
}

当我试图将排序信息放入闭包本身时,Hibernate 用 message 抛出了一个异常org.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain]

于 2014-05-15T16:12:09.357 回答
2

您是否尝试过使用 listOrderBy* GORM 命令,所以它会像

def tasksList = Task.listOrderByActionName()
于 2010-08-01T19:45:10.190 回答
2

尝试这个

 def tasksList = Task.findAll()
 tasksListSorted = tasksList.sort { it.actionParent.actionName }

你也可以这样做

 tasksList.sort{
        task1, task2 -> task1.actionParent.actionName.compareToIgnoreCase(task2.actionParent.actionName)

    }
于 2015-10-13T13:53:59.727 回答