0

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

我现在想检索按这些分数之一排序的这些对象的列表(例如,按受欢迎程度分数降序)。

有没有办法使用 GORM?

示例类:

class SomeObject {
    String title

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

2 回答 2

0

杰瑞德,你是对的。由于它是一个计算值并且没有存储在数据库中,因此 GORM 无法知道任何关于它的信息。如果您按照您说的做并为该值创建一个新列,然后根据需要对其进行更新,您可以使用该SomeObject.list(order:'desc', sort: 'popularity', max:10)语法。

于 2009-11-13T00:38:10.103 回答
0

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

objectList.sort{popularity()}

请注意以下链接。http://jlorenzen.blogspot.com/2008/05/groovy-sort-list.html

如果计算公式很简单,您始终可以使用 HQL 查询而不是默认的 find by 方法。HQL 是一种类似于 SQL 的查询语言,适用于 Gorm 所基于的 Hibernate 对象。有关更多信息,请参阅以下链接。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html 如果您不需要实时更新计算字段并且您的计算对于 HQL 来说很复杂可以安排一个作业每隔一小时左右更新一次计算结果,然后将生成的结果存储在您的域类的一个字段中。有关 Grails 作业调度的更多信息,请参阅以下链接。 http://grails.org/Job+Scheduling+%28Quartz%29

于 2009-11-12T18:18:13.163 回答