我是grails的新手。我有3个班级作为follws
class Cycle
{
int year
int quarter
}
class User
{
String username, password
}
class Role
{
String roleName
}
用户和角色表是独立的,它们分别存储所有员工和可用角色的详细信息。 员工在每个周期中都可以拥有多个角色。所以我想要一个像
这样的映射表
查找特定周期中所有角色属于员工的内容。 如何在这些类之间设置正确的关系以解决这个问题,这样如果我有一个cyle和一个用户,我就可以找出用户在该循环中所拥有的所有角色 如果我有一个用户,我可以找到他所涉及的所有周期中他在每个周期中的角色
答案 0 :(得分: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*/)
答案 1 :(得分: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
}
}