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 问题 - 在 create.gsp 中使用 CheckBoxes 而不是 HTML Select
使用 hasmany 字符串查询 Grails / GORM 条件