2014-05-24 27 views
1

我想创建一个域类,像一个用户可以发布很多订单[双向],一个订单可以被许多用户喜欢[单向]。在grails中为相同的域类创建一对多和多对多

我写了一个域类,如下图所示,

Class User { 

    String userName; 

    List orders 

    static hasMany = [Order] 
} 

Class Order { 

    String orderId 

    String orderName 

     //Indicates this order belongs to only one user 
    static belongsTo =[owner : User ] // Bidirectional 

    //Indicates order can be liked by many users 
    static hasMany = [likedUser : User] //Unidirectional 
} 

但我正在逐渐上午错误说无效的架构。任何机构请帮助...

post看起来类似于我的问题,但我没有得到,请帮助。

回答

3

首先,order是SQL中的保留字。由于默认情况下GORM会创建一个与您的类名称相同的表,因此您需要重命名您的类或提供一个不同的名称以在映射到SQL表时使用。

例如:

class Order { 
    static mapping = { 
     table 'user_order' 
    } 
    // ... 
} 

另一个问题是,Order包含两个协会User。您需要告诉GORM其中哪一个是从UserOrder的双向关联。这可以使用mappedBy来实现,如下所示:

class User { 
    String userName 

    static hasMany = [orders: Order] 
    static mappedBy = [orders: 'owner'] 

} 

希望这有助于。

+0

谢谢,我明白了:) – vicky