Grails по умолчанию сортирует атрибуты домена hasMany

Я пытаюсь установить по умолчанию свой атрибут 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)
...

Вы видите ошибки в моем коде?

Ответы

Ответ 1

Пара вопросов, которые могут помочь устранить проблему:

  • Вам действительно нужно использовать Calendar для свойства sendDate? Большую часть времени можно использовать java.util.Date. Изменяет ли тип поля на Date проблему?
  • Я привел пример с вашими сопоставлениями и получил ошибку. Попробуйте изменить Message static mapping замыкание на это:

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

Ответ 2

Эта страница рассказывает о объектной реляционной картографии, у меня была аналогичная проблема с моим приложением. Я решил это так:

class Note implements Comparable {
  Calendar sendDate
  static belongsTo = Message

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

и

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

Надеюсь, что эта помощь!