在grails中使用GORM的领域建模,如何表示关联

问题描述:

我在学习grails,我想出了一个用例。在我的使用案例中,产品有许多用户,每个用户可以有很多角色。在grails中使用GORM的领域建模,如何表示关联

这里是我产品类:

class Product { 

    String name 
    String description 
    String vision 
    Date startDate 
    Date endDate 

    static hasMany = [users : User, contributors : User, watchers : User, approvers : User] 
    static belongsTo = User 

    static constraints = { 
    } 
} 

这里是我的用户等级:

class User { 

    static constraints = { 
    } 

    String fullName 
    String email 

    static hasMany = [roles : Roles, products : Product] 
} 

这里是角色枚举:

public enum Roles { 
    PRODUCTOWNER ('ProductOwner'), 
    APPROVER ('Approver'), 
    CONTRIBUTOR ('Contributor'), 
    WATCHER ('Watcher') 
} 

我的问题是明确有关关联产品和用户之间。我想表示一个产品可以拥有许多不同角色的用户这一事实。此外,每个用户都可以成为多个产品的一部分,并且每个产品都有不同的角色。这是代表这种关系的正确方法吗?另外,我应该能够删除用户并将其添加到产品中,反之亦然。这也意味着,用户可以继续在角色之间移动,并可以移入和移出产品。在这种情况下,我可能不希望级联发生。如何防止这种关系的CRUD操作发生自动级联?

谢谢。

我认为,而不是在User.groovy中有角色和产品,如果您创建一个像UserProductRole这样的独立域,将会更好。至于你说的用户将在不同的产品有不同的作用,然后创建一个单独的域更有意义的商业用例,也做查询

class UserProductRole{ 

    Role role 

    static belongsTo = [user:User,product:Product] 

    static constraints = { 
     user (unique:['product','role'] 
    } 
} 

您可以创建复合键,但我一般不因为它使查询有点困难perfer它。

,现在你需要改变的hasMany在用户和产品像下面

[userProducts:UserProductRole]而不是为用户或产品

+0

这是伟大的。让我旋转一下。为了我的需要,我并不是唯一的约束。我会玩这个并在这里更新。 – motiver