基于自定义域类方法对对象进行排序

时间:2009-11-12 16:42:41

标签: grails gorm

我有一个域类,我在其中定义了一些方法,这些方法根据不同的算法(例如流行度)给对象一个分数。

我现在想要检索按这些分数之一排序的这些对象的列表(例如,按人气得分降序)。

GORM还有办法吗?

示例类:

class SomeObject {
    String title

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

2 个答案:

答案 0 :(得分:0)

我能想到三种解决方案。假设您的数据集很小,您只需返回整个列表然后对其进行排序即可。 例如

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

答案 1 :(得分:0)

杰瑞德,你是对的。由于它是一个计算值而没有存储在数据库中,因此GORM无法了解它。如果按照您的说法执行操作并为值创建新列,然后根据需要进行更新,则可以使用SomeObject.list(order:'desc', sort: 'popularity', max:10)语法。