Grails default sort of "hasMany" domain attributes
Asked Answered
N

2

16

I'm trying to set default sort of my hasMany attribute using mapping statement. I'm following the grails doc but it doesn't work for me (grails 1.3.5). My code looks like:

class Note {
    Calendar    sendDate
    static belongsTo = Message
}

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

The error message looks like:

...
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)
...

Do you see any mistakes in my code?

Nephelinite answered 12/11, 2010 at 12:57 Comment(2)
export your schema and see of table and columns exist grails.org/doc/1.1/ref/Command%20Line/schema-export.htmlMellisamellisent
@Aaron - When I tried this out with the default hsqldb in-memory database, it only created one column for the Calendar field, and everything looked normal (I had thought maybe it was creating two columns to store, e.g., the time zone or something, but it didn't appear that it was).Marinara
M
21

A couple things that may help fix the problem:

  • Do you really need to use a Calendar for the sendDate property? Most of the time, one would use a java.util.Date. Does changing the field type to a Date fix the issue?
  • I ran an example with your mappings and got an error. Try changing your Message static mapping closure to this:

    static mapping = {
        notes sort: 'sendDate', order: 'desc'
    }
    
Marinara answered 12/11, 2010 at 13:43 Comment(2)
Unfortunately both didn't work for me. But I've solved the problem that I defined the relation from both sides. I've just add "Message message" to the Note class and it works.:-) But anyway thanks for your interest!:-)Nephelinite
@Nephelinite - Good to know. I'd recommend posting whatever you found out for a solution as an answer and then accepting it (in a couple days) so that others may know how to solve the problem if they encounter it.Marinara
S
11

This page tells all about Object Relational Mapping, I had a similar problem with my app. I solved it like so:

class Note implements Comparable {
  Calendar sendDate
  static belongsTo = Message

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

and

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

Hope this helpes!

Shark answered 10/3, 2011 at 14:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.