Grails默认排序为"hasMany"域属性

Mat*_*teo 14 grails grails-orm grails-domain-class

我正在尝试hasMany使用mapping语句设置我的属性的默认排序.我正在关注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'
    }
}
Run Code Online (Sandbox Code Playgroud)

错误消息如下所示:

...
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)
...
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ska 21

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

  • 你真的需要使用CalendarsendDate财产?大多数时候,人们会使用a java.util.Date.更改字段类型以Date解决问题吗?
  • 我用你的映射运行了一个例子并得到了一个错误.尝试将Message静态mapping闭包更改为:

    static mapping = {
        notes sort: 'sendDate', order: 'desc'
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • @Mateo - 很高兴知道.我建议发布您找到的任何解决方案作为答案,然后接受它(在几天内),以便其他人可以知道如果遇到问题如何解决问题. (2认同)

Bad*_*llz 9

这个页面讲述了所有关于对象关系映射,我的应用程序遇到了类似的问题.我这样解决了:

class Note implements Comparable {
  Calendar sendDate
  static belongsTo = Message

  int compareTo(obj) {
    sendDate.compareTo(obj.sendDate)
  }
}
Run Code Online (Sandbox Code Playgroud)

class Message {
  SortedSet notes
  static  hasMany = [notes: Note]
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于此!