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

Posted

技术标签:

【中文标题】Grails 默认排序的“hasMany”域属性【英文标题】:Grails default sort of "hasMany" domain attributes 【发布时间】:2011-05-09 01:38:02 【问题描述】:

我正在尝试使用映射语句设置我的hasMany 属性的默认排序。我正在关注 grails 文档,但它对我不起作用(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)
...

您发现我的代码中有任何错误吗?

【问题讨论】:

导出您的架构并查看表和列是否存在grails.org/doc/1.1/ref/Command%20Line/schema-export.html @Aaron - 当我尝试使用默认的 hsqldb 内存数据库时,它只为 Calendar 字段创建了一列,一切看起来都很正常(我原以为它可能会创建两个要存储的列,例如时区或其他内容,但它似乎不是)。 【参考方案1】:

可能有助于解决问题的几件事:

您真的需要为sendDate 属性使用Calendar 吗?大多数时候,人们会使用java.util.Date。将字段类型更改为 Date 是否可以解决问题?

我使用您的映射运行了一个示例,但出现了错误。尝试将您的 Message 静态 mapping 闭包更改为:

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

【讨论】:

不幸的是,两者都不适合我。但是我已经解决了我从双方定义关系的问题。我刚刚在 Note 类中添加了“消息消息”并且它可以工作。:-) 但无论如何感谢您的关注!:-) @Mateo - 很高兴知道。我建议将您发现的任何解决方案作为答案发布,然后(几天后)接受它,以便其他人在遇到问题时知道如何解决。【参考方案2】:

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]

希望这会有所帮助!

【讨论】:

以上是关于Grails 默认排序的“hasMany”域属性的主要内容,如果未能解决你的问题,请参考以下文章

Grails:如何在 hasMany 关系中搜索孩子?

Grails - 简单的 hasMany 问题 - 在 create.gsp 中使用 CheckBoxes 而不是 HTML Select

使用 hasmany 字符串查询 Grails / GORM 条件

为啥grails在第一次访问hasMany关系时抛出空指针异常?

Grails 将 JSON 解析为域类

Emberjs 高级排序 hasMany 关联作为计算属性