Как переопределить DomainClass.list() в GORM (Grails)

Люди, я столкнулся с проблемой grails GORM, мое приложение полностью зависит от метода DomainClass.list(), он есть во всех моих GSP создания/редактирования, но теперь мне нужно особое поведение для перечисления объектов . Если быть более точным, мне нужно отфильтровать эти списки (все) по одному атрибуту.

Проблема в том, что я надеюсь не менять внешний вид вызова этих методов, поэтому есть ли способ настроить поведение метода list() по умолчанию? Мне нужно, чтобы он функционировал так же, как и раньше, но с добавлением конечного фильтра.


person JRafaelM    schedule 24.02.2012    source источник
comment
Вы нашли решение? У меня точно такая же проблема, я добавил своим пользователям статус DELETED и не хочу изменять весь код для вызова нового метода, я просто хочу, чтобы этот список() не возвращал удаленных пользователей   -  person Eduard    schedule 13.09.2013
comment
@Эдуард, такая же проблема. Вы нашли решение?   -  person Alexander Suraphel    schedule 16.04.2014


Ответы (2)


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

static hibernateFilters = {
    enabledFilter(condition: 'deleted=0', default: true)
}
person zoran119    schedule 24.02.2012
comment
К вашему сведению: я протестировал подключаемый модуль фильтра гибернации, и, похоже, он не работает с Grails 2.0. Кроме того, это не работает с вызовами get() - person Dónal; 24.02.2012
comment
Я не знаю, работает ли это для меня, моя проблема довольно сложная. Фильтрация не напрямую связана с атрибутами доменных классов, она находится в сложных отношениях, и я не узнаю в документации плагина, действительно ли это решает проблему. Но этот плагин может решить более простую проблему. - person JRafaelM; 24.02.2012

Рассматривали ли вы возможность использования запросов имен? Вы всегда можете сделать что-то вроде этого:

class DomainClass {
    // ... class members

    static namedQueries = {
        myList { params->
            // put your complicated logic here
        }
    }
}

Затем вы можете просто заменить свои вызовы DomainClass.list() на DomainClass.myList.list().

person seth.miller    schedule 24.02.2012
comment
На самом деле моя проблема в том, что я не хочу заменять все эти вызовы DomainClass.list(). Я изучаю метапрограммирование Grails, чтобы проверить, может ли оно решить мою проблему.... - person JRafaelM; 27.02.2012
comment
Можно ли сделать именованные запросы по умолчанию? - person Alexander Suraphel; 09.07.2014