2009-11-12 83 views
0

我有一個域類,我在其中定義了一些方法,可以根據不同的算法(如流行度)爲對象提供評分。基於自定義域類方法對對象排序

我現在想要檢索這些對象的列表,這些對象按照這些分數中的一個排序(例如,按流行分數降序排列)。

有沒有辦法處理GORM?

Example類:

class SomeObject { 
    String title 

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

更新我的回答有更新的知名度或計算其在飛行中的多種方式。 – Jared 2009-11-15 13:30:17

回答

0

Jared和你是對的。由於這是一個計算的值,並沒有存儲在數據庫中,GORM無法知道任何事情。如果像你說的,創造價值的新列,然後根據需要可以使用SomeObject.list(order:'desc', sort: 'popularity', max:10)語法更新做。

0

有三種解決方案,我能想到的。假設你的數據集很小,你可以返回整個列表然後對其進行排序。 例如

objectList.sort{popularity()} 

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

如果計算公式很簡單,您可以始終使用HQL查詢,而不是按方法默認查找。 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

+1

嘿賈裏德,其實這種間接回答我的問題。此方法正確地對對象列表進行排序,但要顯示前十個對象,則必須拉出所有記錄,然後進行排序,這具有明顯的性能影響。 受歡迎程度應該有它自己的專欄,並在算法因素的變化應該更新。我認爲這是在數據庫層面限制查詢受歡迎程度的唯一方法。 這是一個非常方便的技巧雖然,謝謝! – Thody 2009-11-12 19:36:17