2014-09-11 45 views
0

我有兩個域類如下:格姆動態取景器VS Grails的注入屬性類型

class Field { 

    static hasMany = [options: Option] 

} 

class Option { 

    String caption 

    static belongsTo = [field: Field] 
    static mappedBy = [field: Field] 

    static constraints = { 
    caption maxSize: 255 
    } 
} 

我的問題是:什麼時候使用field.options和什麼時候使用Options.findAllByField()?我的單元測試使用field.options(grails注入的屬性類型)現在在切換到HibernateTestMixin(使用內存數據庫)後開始失敗。如果我切換到Gorm動態搜索器,他們只會通過。我究竟做錯了什麼? 。:(

感謝

回答

0

一兩件事,那就是錯的是的mappedBy的用途,應該用這個關聯,如果你有相同類型的多個屬性,我建議刪除的部分:

static mappedBy = [field: Field] 

但是,這將很可能不會解決您的問題

如果你有一個字段實例(連接到Hibernate的Session),那麼你應該使用自然:

Set options = field.options 

當你的字段實例從hibernate會話中分離出來並且它的選項關聯沒有被加載(因爲延遲加載),那麼發出field.options會拋出LazyInitializationException。

在測試中使用field.options時,請發佈您遇到的錯誤。也許你的字段實例脫離會話(這可能是由事務服務拋出的RuntimeException引起的)。