2014-09-23 111 views
1

我是grails新手。我有3类作为follwsGrails集3类映射表

class Cycle 
{ 
    int year 
    int quarter 
} 

class User 
{ 
    String username, password   
}   

class Role 
{ 
    String roleName 
} 

用户和角色表是独立的,它们分别存储所有员工的详细信息和可用角色。 员工在每个周期中都可以有许多角色。所以我要像

enter image description here

的映射表中查找所有角色属于在特定周期的员工有什么期待。 我如何设置这些类之间的正确关系来解决这种情况,以便如果我有一个cyle和一个用户,我可以找出用户在该周期中所有角色 也如果我有一个用户,我可以找到哪些周期他涉及他在这些周期中的每一个角色

回答

0

继评论。 您应该创建用户和循环

class UserCycle 
{ 
    User user 
    Cycle cycle 
    static hasMany = [roles: Role] 
} 

角色类之间的表应该是这样的:

class Role 
{ 
    String roleName 
    UserCycle userCycle 
} 

,并在代码中你可以参考像:

UserCycle uc = ... 
def roles = uc.roles.list(params) //list of roles 
def cycle = uc.cycle 
def user = uc.user 

添加

uc.addToRoles(/*Your role*/) 

删除

uc.removeFromRoles(/*Your role*/) 
+0

对你的假设略有修正。 用户可以有很多周期和很多角色, 周期可以有很多用户,每个用户在一个特定的周期可以有很多角色。 JPG)将帮助你理解我的意思。 此外,用户和角色表是主表,他们不应该属于任何其他表。那就是用户和角色应该能够独立创建。 创建新周期后,您应该能够选择现有员工和现有角色,并将此用户角色组合分配给新创建的周期。 – 2014-09-23 07:21:13

+0

因此,如果用户可以有多个周期并且周期可以有多个用户在它们之间创建一个表,例如UserCycle,它将包含对特定用户和一个角色的引用。 – MNie 2014-09-23 07:33:58

+0

此链接将有所帮助: https://grails.org/Many-to-Many+Mapping+without+Hibernate+XML http://chrisbroadfoot.id.au/2008/07/19/many-to -many-relationship-mapping -gorm-grails/ – MNie 2014-09-23 07:54:53

0

你需要添加一个连接表(域类)存储在一个特定的周期用户和角色之间的映射。这里有一个这样的类的例子,有一些可能有用的帮助方法

class UserRole implements Serializable { 

    User user 
    Role role 
    Cycle cycle 

    static UserRole create(User user, Role role, Cycle cycle, boolean flush = false) { 
     new UserRole(user: user, role: role, cycle: cycle).save(flush: flush, insert: true) 
    } 

    static boolean remove(User user, Role role, Cycle cycle, boolean flush = false) { 
     UserRole instance = UserRole.findByUserAndRoleAndCycle(user, role, cycle) 
     if (!instance) { 
      return false 
     } 

     instance.delete(flush: flush) 
     true 
    } 

    static void removeAll(User user) { 
     executeUpdate 'DELETE FROM UserRole WHERE user=:user', [user: user] 
    } 

    static void removeAll(Role role) { 
     executeUpdate 'DELETE FROM UserRole WHERE role=:role', [role: role] 
    } 

    static void removeAll(Cycle cycle) { 
     executeUpdate 'DELETE FROM UserRole WHERE cycle=:cycle', [cycle: cycle] 
    } 

    static mapping = { 
     id composite: ['role', 'user', 'cycle'] 
     version false 
    } 
} 
+0

请你告诉我如何插入这张表.. – 2014-09-23 08:15:45

+0

使用'create'方法 – 2014-09-23 08:22:39

+0

好吧。将删除此表上的循环或用户级联删除? – 2014-09-23 08:26:44