【问题标题】:Grails default sort of "hasMany" domain attributesGrails 默认排序的“hasMany”域属性
【发布时间】: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 字段创建了一列,一切看起来都很正常(我原以为它可能会创建两个要存储的列,例如时区或其他内容,但它似乎不是)。

标签: grails grails-orm grails-domain-class


【解决方案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]
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多