【发布时间】:2014-05-08 16:39:26
【问题描述】:
如何通过外键的GORM映射在数据库级别实现on delete cascade?
我不是指应用程序级别的级联删除(由 GORM 完成的顺序删除)。
【问题讨论】:
-
你用的是什么数据库?
标签: hibernate grails grails-orm
如何通过外键的GORM映射在数据库级别实现on delete cascade?
我不是指应用程序级别的级联删除(由 GORM 完成的顺序删除)。
【问题讨论】:
标签: hibernate grails grails-orm
尝试在您的域类中使用 cascade: 'all-delete-orphan' 添加静态映射
例如
class Parent {
hasOne = [child: Child]
...
static mapping = {
child cascade: 'all-delete-orphan'
}
}
class Child {
belongsTo = [parent: Parent]
}
如果你有时间看看这个:http://grails.org/doc/2.3.7/guide/GORM.html#cascades
希望对你有帮助
【讨论】:
GORM 是一个对象关系映射器,它的实现和职责在应用程序的应用层内。您要求由您的 RDBMS(Postgres 或 MySQL)处理级联删除的请求不在 GORM 的职责范围内。
但是,完全可以使用触发器在 RDBMS 中实现级联行为。有关如何完成的,请参阅相应的文档。此外,您将需要禁用 hibernate 的二级缓存(因为这些更改,您的数据库将与 hibernate 不同步)。
最后,为了帮助您维护触发器,您可以使用 Grails 的数据库迁移插件/功能。
祝你好运,但要小心,因为你正在绕过 GORM/Hibernate/Grails。
【讨论】:
cascade 特性如果是 GORM 的一个特性并且没有在数据库级别实现它。它通过 GORM 并不会影响架构(因为并非所有数据库都支持这样)。
cascade 行为从未打算在数据库级别实现。