我使用的是Spring Security,并具有以下实体:User,Role和UserRole,如果我没有记错的话,它们是默认的。此外,我还有一个名为Employee的额外实体,它拥有一个用户列表:
class Employee {
static hasMany = [users: User]
users cascade: "all"
...
}
UserRole看起来像:
class UserRole implements Serializable {
User user
Role role
...
}
并且这个实体由多对多表表示。
当我删除Employee时,我也想删除与Employee关联的所有用户。为此,我添加了层叠:“全部”。但是我不能删除用户,也不能删除与他相关联的角色,因为我有许多表。现在,我有一个特殊的代码可以做到这一点。也许可以用UserRole实体中的级联来实现它,但是对我来说还不清楚如何实现,因为UserRole具有相当奇怪的结构(但它的确有其用)。有人可以帮我吗?谢谢。
最佳答案
如果要删除某个员工以使其级联到与该员工相关联的用户,则可以通过将映射设为双向并让员工成为所有者来实现此目的,例如
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()
}
}
关于grails - 棘手的gorm级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917229/