棘手的gorm级联删除

时间:2014-09-18 15:52:16

标签: grails grails-2.0 grails-plugin

我正在使用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一个)。请有人帮我这个吗?谢谢。

1 个答案:

答案 0 :(得分:2)

如果要删除员工级联到与员工关联的用户,可以通过将映射设为bidrectional并使员工成为所有者来实现此目的,例如:

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

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

如果您无法类似地定义UserUserRole之间的关系,请将以下内容添加到User类,以确保删除关联的UserRole实例使用拥有它们的User实例:

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