2014-09-18 418 views
0

我使用弹簧安全,并具有以下实体:用户,角色和UserRole,如果我没有错误是默认的。此外,我有这被称为员工额外的实体,它拥有用户的列表:棘手gorm级联删除

class Employee { 
    static hasMany = [users: User] 
    users cascade: "all" 
    ... 
} 

UserRole的样子:

class UserRole implements Serializable { 

    User user 
    Role role 
    ... 
} 

这个实体是多对多的表来表示。 当我删除员工时,我想删除所有与员工关联的用户。所以为此我添加了cascade:“all”。但是我不能删除用户,也不要删除与他相关的角色,因为我有很多表。现在我有一个特殊的代码。也许它在某种程度上可能与UserRole实体中的级联一起实现,但对于我来说,并不清楚如何因为UserRole具有非常奇怪的结构(但它的虚拟实体)。有人可以帮我解决这个问题吗?谢谢。

回答

2

如果您想要删除员工以便与员工关联的用户级联,您可以通过将地图投标并使员工成为所有者来实现此目的,例如,

class Employee { 
    static hasMany = [users: User] 
} 

class User { 
    static belongsTo = [employee: Employee] 
} 

如果您不能定义UserUserRole之间的关系类似,然后添加以下到User类,以确保相关UserRole实例与拥有他们User实例一起被删除:

def beforeDelete() { 
    User.withNewSession { 
     UserRole.findAllByUser(this)*.delete() 
    } 
}