如何防止双向关联的级联删除?

时间:2011-04-08 12:46:52

标签: grails associations gorm cascade cascading-deletes

我想知道是否可以在没有级联删除的情况下删除双向1:N关联中的父对象。根据

http://grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html

...在单向关系中,父端用'save-update'映射,子端用'none'映射。我已经尝试过双向关系的这些设置,但并不奇怪它不起作用。具体做法是:

class Personnel {
    ...
}

static hasMany = [projectlead:Project, projectmanager:Project]

static mappedBy = [projectlead:'leaddeveloper', projectmanager:'projectmanager']

static mapping = {
    projectlead     cascade:'save-update'
    projectmanager  cascade:'save-update'
}

这是项目类:

class Project {
    ...
}
static belongsTo = [leaddeveloper:Personnel, projectmanager:Personnel]

static mapping = {
    leaddeveloper   cascade:'none'
    projectmanager  cascade:'none'
}

我宁愿不重新设计我的应用程序(通过从Project类中删除“belongsTo”),如果有一个解决方案:两端的导航访问非常方便,我没有太多实例项目结束。

另外,如果有办法实现这一点,那么知道后来那些活动映射会发生什么会很有意思,我可以将它们(或者它们会被设置)设置为“null”吗?

感谢对此事的任何意见。

1 个答案:

答案 0 :(得分:2)

通过阅读您的问题,我认为您要删除“Personnel”对象,但保持其“projects”不变。遗憾的是,目前的实施无法做到这一点。 “belongsTo”关系意味着每个子对象都必须具有Parent对象。如果删除Parent,也会删除孤儿。

您可以在不修改设计的情况下尝试的另一个选项是“标记为已删除”。在Personal中添加“已删除”字段,如果您要删除某人,只需将其标记为已删除即可。这将帮助您保留项目的历史数据,即使在项目经理离开后也是如此。