grails - 棘手的gorm级联删除

标签 grails grails-2.0 grails-plugin

我使用的是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]
}

如果无法类似地定义UserUserRole之间的关系,则将以下内容添加到User类中,以确保删除关联的UserRole实例以及拥有它们的User实例:
def beforeDelete() {
    User.withNewSession { 
        UserRole.findAllByUser(this)*.delete()
    }
}

关于grails - 棘手的gorm级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917229/

相关文章:

grails - 实体未保存

grails - 如何使用 grails jasper 插件使用添加到 JasperReports 3.7.2 的表格组件?

grails - Grails Spring Security Core插件: Controller 不需要身份验证

unit-testing - 在Grails 2中使用build-test-data插件

grails - spring-security-core Grails插件

grails - 在 Grails 应用程序中创建 "pretty"用户配置文件 URL

grails - 可以使用哪些Grails插件与Twitter快速集成

grails - 如何在匹配约束中转义正斜杠

spring - 无法在Grails Hibernate中将数据库状态与 session 错误同步

spring - 在 Grails 2.0 下的过滤器中“未找到线程绑定(bind)请求”