2010-11-12 4 views
14

Я пытаюсь установить по умолчанию свой атрибут hasMany с использованием оператора сопоставления. Я следую за документом grails, но он не работает для меня (grails 1.3.5). Мой код выглядит следующим образом:Grails default сортирует атрибуты домена hasMany

сообщение
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) 
... 

Видите ли вы какие-либо ошибки в своем коде?

+0

экспорт вашей схемы и просмотр таблицы и столбцов существуют http://www.grails.org/doc/1.1/ref/Command%20Line/schema-export.html –

+0

@Aaron - Когда я попробовал это с использованием по умолчанию hsqldb в базе данных, он создал только один столбец для поля «Календарь», и все выглядело нормально (я думал, возможно, он создавал два столбца для хранения, например, часовой пояс или что-то еще, но не показалось, что это было). –

ответ

20

пара вещей, которые могут помочь решить эту проблему:

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

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

К сожалению, для меня это не сработало. Но я решил проблему, что я определил отношение с обеих сторон. Я просто добавил сообщение «Сообщение» в класс Note, и он работает. :-) Но в любом случае спасибо за ваш интерес! :-) – Mateo

+2

@Mateo - Полезно знать. Я бы рекомендовал опубликовать все, что вы узнали для решения, в качестве ответа, а затем принять его (через пару дней), чтобы другие могли знать, как решить проблему, если они столкнутся с ней. –

9

This page рассказывает все о Object Relational Mapping, у меня была аналогичная проблема с моим приложением. Я решил это так:

class Note implements Comparable { 
    Calendar sendDate 
    static belongsTo = Message 

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

и

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

Надежда это helpes!

Смежные вопросы