我正在使用Spring安全性并拥有以下实体:User,Role和UserRole,如果我没有误会是默认值。此外,我还有一个名为Employee的额外实体,它拥有一个用户列表:
class Employee {
static hasMany = [users: User]
users cascade: "all"
...
}
UserRole看起来像:
class UserRole implements Serializable {
User user
Role role
...
}
并且该实体由多对多表表示。 当我删除员工时,我想删除与Employee关联的所有用户。所以为此我添加了级联:“全部”。但我无法删除用户,也不会删除与他关联的角色,因为我有很多表。现在我有一个特殊的代码来做到这一点。也许它在某种程度上可以用UserRole实体中的级联来实现,但对我来说,不清楚是因为UserRole有相当奇怪的结构(但它的defula一个)。请有人帮我这个吗?谢谢。
答案 0 :(得分:2)
如果要删除员工级联到与员工关联的用户,可以通过将映射设为bidrectional并使员工成为所有者来实现此目的,例如:
class Employee {
static hasMany = [users: User]
}
class User {
static belongsTo = [employee: Employee]
}
如果您无法类似地定义User
和UserRole
之间的关系,请将以下内容添加到User
类,以确保删除关联的UserRole
实例使用拥有它们的User
实例:
def beforeDelete() {
User.withNewSession {
UserRole.findAllByUser(this)*.delete()
}
}