2009-10-31 50 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