2011-02-03 79 views
17

踩在這個上面。在Grails中,似乎無法在域映射拉丁靜態映射中的多個列上定義默認排序:{sort'prop1 desc,prop2 asc'}或{sort([prop1:'desc',prop2:'asc']) }。只有第一列被排序,跛腳。對多個字段進行Grails映射排序::對多個映射條目進行Groovy排序

同樣,當嘗試Groovy對多列上的Grails findAllBy查詢進行排序時,第二種排序會覆蓋第一個排序。

DEF列表= [[的rowNum:2,位置:3],[的rowNum:1,位置:2],[的rowNum:3,位置:1]]

list.sort {it.rowNum} .sort {it.position}

明顯錯過了後一種情況下的船,時髦的排序。我已經看過帖子:實施可比較的,但如果可能的話,尋找更簡潔的東西。

+0

工作對我來說有這個古老而懸而未決的要求:http://jira.grails.org/browse/GRAILS-5306 – GreenGiant 2013-04-04 14:35:11

回答

30

這是一個Groovy解決方案。儘管如此,仍然基本上實現了比較器

list.sort { map1, map2 -> map1.rowNum <=> map2.rowNum ?: map1.position <=> map2.position } 
+1

剛剛看到沒有在控制檯中測試 - 這將實現與HQL查找相同(「按照rowNum asc,position desc從SomeDomain的順序」)? – virtualeyes 2011-02-03 08:03:01

+0

美味; - )證實它的工作; 1-liner非常好。如果我們可以在grails中進行映射級別的工作,那將會很好,但是這可能需要等待1.4和新的hibernate。謝謝彼得! – virtualeyes 2011-02-03 08:07:47

0

如果您知道最大長度,則可以使用String.format。我認爲最大10長度:

list.sort { String.format('%010d%010d', it.rowNum, it.position) } 
4

感謝來自GreenGiant鏈接,我們看到,作爲固定爲2.3版本的問題被關閉。

還有示例代碼:

static mapping = 
    { sort([lastname:'asc', name:'asc']) } 

它在2.4.3