Grails - сортировка по атрибуту доменного отношения (с использованием createCriteria ()) - PullRequest
2 голосов
/ 01 августа 2010

У меня есть два класса домена с отношением 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)
}

Есть ли способ сортировки данных класса домена по атрибутам отношений?

Спасибо за повтор,

Mateo

Ответы [ 4 ]

4 голосов
/ 01 августа 2010

Если вы хотите придерживаться критериального подхода, попробуйте что-то вроде этого. Создайте псевдоним для объекта Action и затем получите доступ к свойству для его сортировки

    def criteria = Task.createCriteria()
    def taskList = criteria.list {
        createAlias("actionParent","_action")
        order( "_action.actionName")
    }
2 голосов
/ 13 октября 2015

попробуйте

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

Вы также можете сделать это

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

    }
2 голосов
/ 15 мая 2014

Я знаю, что это старый вопрос, но в моей конкретной ситуации (при желании выполнить сортировку по полю ассоциации ассоциации) он работал, только когда я передал столбец сортировки непосредственно в метод списка:

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].

2 голосов
/ 01 августа 2010

Вы пытались использовать команду listOrderBy * GORM, поэтому она будет выглядеть примерно так:

def tasksList = Task.listOrderByActionName()
...