Сортировка объектов на основе пользовательских методов класса домена - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть класс домена, в котором я определил некоторые методы, которые дают объекту оценку на основе различных алгоритмов (например, популярность).

Теперь я хочу получить список этих объектов, отсортированных по одному из этих показателей (например, по убыванию по популярности).

Есть ли способ сделать с GORM?

Пример класса:

class SomeObject {
    String title

    Integer popularity() {
        //some algorithm
        return popularity
    }
}

Ответы [ 2 ]

0 голосов
/ 13 ноября 2009

Джаред и ты прав. Поскольку это вычисленное значение, которое не хранится в БД, GORM не может ничего узнать об этом. Если вы делаете, как вы говорите, и создаете новый столбец для значения, а затем обновляете его по мере необходимости, вы можете использовать синтаксис SomeObject.list(order:'desc', sort: 'popularity', max:10).

0 голосов
/ 12 ноября 2009

Есть три решения, которые я могу придумать.Предполагая, что ваш набор данных небольшой, вы можете просто вернуть весь список, а затем отсортировать его.Например,

objectList.sort{popularity()}

Примечание, основанное на следующей ссылке.http://jlorenzen.blogspot.com/2008/05/groovy-sort-list.html

Если формула расчета проста, вы всегда можете использовать HQL-запрос вместо поиска по умолчанию по методам.HQL - это язык запросов, похожий на SQL, который работает с объектами Hibernate, на которых построен Gorm.Для получения дополнительной информации см. Следующую ссылку.http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html Если вам не нужно обновлять вычисляемое поле в режиме реального времени и ваши вычисления слишком сложны для HQL, вы можете запланировать задание на обновление результатов вычислений каждый час или около того, а затем сохранить сгенерированный результат.в поле вашего класса домена.Для получения дополнительной информации о планировании работы Grails см. Следующую ссылку.http://grails.org/Job+Scheduling+%28Quartz%29

...