2010-11-12 80 views
14

我試圖使用映射語句來設置默認排序的我的hasMany屬性。我遵循grails doc,但它不適用於我(grails 1.3.5)。我的代碼如下所示:Grails缺省排序的「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 – 2010-11-12 13:46:39

+0

@Aaron - 當我試着用默認的hsqldb內存數據庫中,它只爲「日曆」字段創建了一列,並且一切看起來很正常(我想也許它是創建了兩列來存儲,例如時區或其他東西,但它似乎並沒有出現它是)。 – 2010-11-12 16:21:18

回答

20

有兩件事情,可以幫助解決這個問題:

  • 你真的需要使用CalendarsendDate財產?大多數情況下,會使用java.util.Date。是否將字段類型更改爲Date可解決此問題?
  • 我用你的映射運行一個例子,並得到一個錯誤。試着改變你Message靜態mapping關閉此:

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

不幸的是,兩者都不適合我。但是我解決了從雙方定義關係的問題。我只是在Note類中添加了「Message message」,它可以工作。:-)但無論如何感謝您的關注!:-) – Mateo 2010-11-12 14:25:50

+2

@Mateo - 很高興知道。我建議發佈任何你發現的解決方案作爲答案,然後接受它(在幾天內),以便其他人在遇到問題時可以知道如何解決問題。 – 2010-11-12 16:22:18

9

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] 
} 

希望這helpes!