2009-10-31 81 views
3

我有一個帶域名Restaurant和域Person的grails應用程序。grails中的多個關聯

class Restaurant { 
    String name 

    static belongsTo = [ owner: Person ] 
} 

class Person { 
    String name 

    static hasMany = [ favoriteRestaurants : Restaurant ] 
} 

我的問題是,GORM只創建兩個表,餐廳和人,其中餐廳有一個owner_id。然而,我所缺少的是連接一個人最喜歡的餐廳給他的連接表。

我可以理解爲什麼GORM這樣做(雙向一對多),但我無法弄清楚如何以我想要的方式做到這一點(1x單向一對多,1x單向多對多,對一的)。我想我應該用mappedBy,但我不知道該怎麼把它映射成,因爲其中沒有鏈接回:-(

此外,我最初考慮以下領域:

class Restaurant { 
    String name 

    static belongsTo = [ owner: Person ] 
    static hasMany = [ outstandingCouponOwners : Person ] 
} 

class Person { 
    String name 

    static hasMany = [ favoriteRestaurants : Restaurant ] 
} 

哪裏有另一個一對多的關係(並沒有什麼可以將它映射到另一端)

回答

2

我認爲,你必須使用'mappedBy'域類的靜態映射。 section 5.2.1.2 grails參考指南 可能需要引入額外的entr Person's hasMany中的人物:該人擁有的餐館列表。試試下面的(完全未經測試)代碼:

class Restaurant { 
    String name 

    static belongsTo = [ owner: Person ] 
    static hasMany = [ outstandingCouponOwners : Person ] 
} 

class Person { 
    String name 

    static hasMany = [ favoriteRestaurants : Restaurant, owns: Restaurant, coupons: Restaurant ] 
    static mappedby = [ owns: 'owner', coupons: 'outstandingCouponOwners' ] 
} 
+0

我有另外一個一對多的關係,併爲您的建議工作,我不得不改變爲「靜態屬於關聯=人」,並增加「人所有者」代替。還爲favoriteRestaurants添加了反向hasMAny以及爲class餐廳添加了mappedBy。但它然後工作 – Steve 2009-11-01 11:55:34