2012-06-27 20 views
1

所以這裏是情況:未保存的域類以一對多的順序返回子對象

我有一個類。對於例子緣故

class Author { 
     String name 

     static hasMany = [books: Book] 
     static mapping = { 
     books cascade: "all-delete-orphan" 
     } 
    } 

    class Book { 
     String text 

     static belongsTo = [author: Author] 

     static constraints = { 
     text minSize: 500 
     } 
    } 

現在,我創建一個表單這個一對多,當我嘗試驗證,該人士並未對文本輸入至少500個字符,所以我返回對象回到窗體。

問題是孩子的對象沒有按照我創建的順序返回!你如何驗證一個從未被保存的域類的子對象?!?!

謝謝!

回答

0

嘗試這種方式

class Author { 
    String name 
    ArrayList<Book> books = [] 
    static hasMany = [books: Book] 
    static mapping = { 
    books cascade: "all-delete-orphan" 
    } 
} 

如果沒有工作,我認爲你有一些外地訂購

您可以指定排序順序這樣

class Author { 
    String name 

    static hasMany = [books: Book] 
    static mapping = { 
    books cascade: "all-delete-orphan" 
    books sort: 'id', order: 'desc' 
    } 

} 
+0

我試試第一個,但是該字段的排序選項只適用於保存的對象 - 我一直在那條路上。 –

+0

讓我知道如果第一個作品! –

+0

是的!第一個工作!謝謝!! –

0

默認情況下,hasMany用途一個Set來存儲相關的對象,而一個Set沒有順序的概念。如果訂單對您的應用程序很重要,我建議您改用List

+0

只是出於好奇心......爲什麼設置默認?什麼時候比List更有利? –

+0

Set是默認設置,因爲通常在關聯中,您只希望將其關聯到帶Bar的Foo的單個實例,所以Set意味着唯一性。一個List,因爲它有一個命令,所以也需要這個命令被持久化,所以你基本上需要一個關於你的關聯的「序數」,所以它比持久化映射關係數據庫一邊的關聯表更加混亂。 – cdeszaq