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

发布于 2024-09-12 17:52:55 字数 758 浏览 10 评论 0原文

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

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

感谢您的重播,

马特奥

I have two domain classes with 1:n relationship:

import Action

class Task {    
    Action actionParent
    String taskName
}

and

class Action {
    String actionName
}

I have the list of Tasks where I have the column "Action name", I would like to sort this column by Action.actionName. Now I'm using the createCriteria() method [I need to use it because I have more logic for filtering and sorting...], but I'm able to sort only by "Action.id". This method looks like:

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)
}

Is there any way to sort the domain class data by the relationship attributes?

Thanks for any replay,

Mateo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

丿*梦醉红颜 2024-09-19 17:52:55

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

    def criteria = Task.createCriteria()
    def taskList = criteria.list {
        createAlias("actionParent","_action")
        order( "_action.actionName")
    }

if you want to stick with the criteria approach, try something like this. Create an alias to you Action object and then access the property for sorting it

    def criteria = Task.createCriteria()
    def taskList = criteria.list {
        createAlias("actionParent","_action")
        order( "_action.actionName")
    }
晚雾 2024-09-19 17:52:55

我知道这是一个老问题,但在我的特殊情况下(想要对关联的关联字段进行排序),只有当我将排序列直接传递到列表方法中时它才起作用:

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: 无法解析属性:[Grails 域关系的关系的字段] of: [Grails 域]。

I know this is an old question, but in my particular situation (wanting to sort on an association's association's field), it worked only when I passed the sort column directly into the list method:

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

When I tried to put the ordering information in the closure itself, Hibernate barfed up an exception with a message org.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain].

帝王念 2024-09-19 17:52:55

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

def tasksList = Task.listOrderByActionName()

Have you tried using the listOrderBy* GORM command, so it would be something like

def tasksList = Task.listOrderByActionName()
十二 2024-09-19 17:52:55

试试这个

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

你也可以这样做

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

    }

try this

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

you can also do this

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

    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文