Grails默认排序为“hasMany”域属性

时间:2010-11-12 12:57:58

标签: grails gorm grails-domain-class

我正在尝试使用mapping语句设置我的hasMany属性的默认排序。我正在关注grails doc,但它对我不起作用(grails 1.3.5)。我的代码如下:

class Note {
    Calendar    sendDate
    static belongsTo = Message
}

class Message {
    static  hasMany = [notes: Note]
    static mapping = {
        notes sort:'sendDate desc'
    }
}

错误消息如下:

...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'notes0_.sendDate' in 'order clause'
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
        at com.mysql.jdbc.Util.getInstance(Util.java:384)
...

你看到我的代码中有任何错误吗?

2 个答案:

答案 0 :(得分:20)

可能有助于解决问题的一些事情:

  • 您真的需要Calendar使用sendDate属性吗?大多数情况下,人们会使用java.util.Date。将字段类型更改为Date是否会解决问题?
  • 我用你的映射运行了一个例子并且出错了。尝试将Message静态mapping关闭更改为:

    static mapping = {
        notes sort: 'sendDate', order: 'desc'
    }
    

答案 1 :(得分:9)

This page告诉所有关于对象关系映射,我的应用程序遇到了类似的问题。我解决了这个问题:

class Note implements Comparable {
  Calendar sendDate
  static belongsTo = Message

  int compareTo(obj) {
    sendDate.compareTo(obj.sendDate)
  }
}

class Message {
  SortedSet notes
  static  hasMany = [notes: Note]
}

希望这有帮助!