我想知道是否可以在没有级联删除的情况下删除双向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”吗?
感谢对此事的任何意见。
答案 0 :(得分:2)
通过阅读您的问题,我认为您要删除“Personnel
”对象,但保持其“projects
”不变。遗憾的是,目前的实施无法做到这一点。 “belongsTo
”关系意味着每个子对象都必须具有Parent对象。如果删除Parent,也会删除孤儿。
您可以在不修改设计的情况下尝试的另一个选项是“标记为已删除”。在Personal
中添加“已删除”字段,如果您要删除某人,只需将其标记为已删除即可。这将帮助您保留项目的历史数据,即使在项目经理离开后也是如此。