GRAILS中的交替默认排序

时间:2009-07-30 22:30:05

标签: grails groovy

为什么以下Groovy代码段会返回

[帐号:2222和2222,帐号:1111和1111]或

[帐号:1111和1111,帐号:2222和2222]

如果你在Groovy控制台中多次运行它? 我认为sort语句导致列表的总是降序排序???

class Account {
    long number
    String code
    String toString() {return "Account: $number and $code"}
    static mapping = {
        sort number:"desc"
    }
}
List items = []
items << new Account(number:1111,code:'1111')
items << new Account(number:2222,code:'2222')
println items.sort()

提前致谢 多米尼克

2 个答案:

答案 0 :(得分:1)

您未在帐户实例中定义订购。 映射指令仅适用于GORM映射类(IOW:“域对象”),并且仅在从数据库AFAIK加载类的实例时使用。

但是,您要将对象附加到普通的 List ,它不了解GORM属性。为了在这样的上下文中可靠地对 Account 实例的列表进行排序,您必须指定显式排序,例如:

class Account implements Comparable {

   ...
   def int compareTo(rhs) {
       long onum = rhs.number;
       return (onum > number)? -1 : ((onum < number)? 1 : 0);
   }
   ...
}

This article提供了有关该主题的更多信息。至于为什么Groovy在多次调用 list.sort 时对列表进行不同的排序:好吧,我不知道......

答案 1 :(得分:0)

Grails有两种主要的默认排序方式:

  1. 查询时排序:

    def airports = Airport.list(sort:'name')
    
  2. 在该对象上放置默认排序方法:

    class Airport {
     …
     static mapping = {
      sort name:"desc"
     }
    }
    
  3. 以上摘自grails documentation