我有一个领域类,我在其中定义了一些方法,这些方法根据不同的算法(例如流行度)给对象打分。
我现在想检索按这些分数之一排序的这些对象的列表(例如,按受欢迎程度分数降序)。
有没有办法使用 GORM?
示例类:
class SomeObject {
String title
Integer popularity() {
//some algorithm
return popularity
}
}
我有一个领域类,我在其中定义了一些方法,这些方法根据不同的算法(例如流行度)给对象打分。
我现在想检索按这些分数之一排序的这些对象的列表(例如,按受欢迎程度分数降序)。
有没有办法使用 GORM?
示例类:
class SomeObject {
String title
Integer popularity() {
//some algorithm
return popularity
}
}
杰瑞德,你是对的。由于它是一个计算值并且没有存储在数据库中,因此 GORM 无法知道任何关于它的信息。如果您按照您说的做并为该值创建一个新列,然后根据需要对其进行更新,您可以使用该SomeObject.list(order:'desc', sort: 'popularity', max:10)
语法。
我能想到三个解决方案。假设您的数据集很小,您可以只返回整个列表然后对其进行排序。例如
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