Sorting Grails映射多字段排序::Groovy多映射项排序

Sorting Grails映射多字段排序::Groovy多映射项排序,sorting,grails,groovy,Sorting,Grails,Groovy,在这件事上难倒了。在Grails中,似乎无法在域映射中的多个列上定义默认排序—la静态映射={sort'prop1 desc,prop2 asc'}或{sort([prop1:'desc',prop2:'asc'])}。只有第一列得到排序,lame 类似地,当尝试对多个列上的Grails findAllBy查询进行Groovy排序时,第二个排序将覆盖第一个排序 def list=[[rowNum:2,位置:3],[rowNum:1,位置:2],[rowNum:3,位置:1]] list.sort

在这件事上难倒了。在Grails中,似乎无法在域映射中的多个列上定义默认排序—la静态映射={sort'prop1 desc,prop2 asc'}或{sort([prop1:'desc',prop2:'asc'])}。只有第一列得到排序,lame

类似地,当尝试对多个列上的Grails findAllBy查询进行Groovy排序时,第二个排序将覆盖第一个排序

def list=[[rowNum:2,位置:3],[rowNum:1,位置:2],[rowNum:3,位置:1]]

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


很明显,在后一种情况下,我们错过了机会,那就是groovy。我看到过关于实现comparable的帖子,但是如果可能的话,我想找一些更简洁的东西。

这里是一个Groovy解决方案。但实际上仍然实现了一个比较器

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

如果知道最大长度,可以使用String.format。我假设最大长度为10:

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

多亏了绿巨人的链接,我们看到这个问题在2.3版时已经解决

还有示例代码:

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

它在2.4.3中对我起作用了,只是看到了我们没有在控制台中测试过——这将实现与HQL find相同的效果(“从SomeDomain作为rowNum asc的s订单,position desc”)?Tasty;--确认它有效;1号线很好。如果我们可以在grails中进行映射级别的工作,那就太好了,但这可能需要等待1.4和新的hibernate。谢谢你,彼得!宇宙飞船和猫王运营商的结合使它成为超级-clean@virtualeyes这不像HQL那样排序,您需要自己查找集合,然后使用排序。这里有一个古老但尚未解决的请求:谢谢,我在发布后不久(4年前)就离开了Grails,但可能会帮助其他人;-)