【问题标题】:Undesirable delete in a many to many relationship in MySqlMySql中的多对多关系中不希望的删除
【发布时间】:2012-09-06 01:34:59
【问题描述】:

有一个类似的问题here 但没有帮助

Organisme 之间有一个经典的多对多关系 | Organisme_groupe | Groupe.

我想在删除Groupe 时保留Organisme,反之亦然。 实际上,如果我删除 Organisme,附加的 Groupe 也会被删除。

我有点困惑,因为据我了解,级联动作不会比子表(这里是中间表)更远。

有机体

  CREATE TABLE IF NOT EXISTS `organisme` (
  `ORGANISME_ID` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,  
  `TYPE_ORGANISME` varchar(128) NOT NULL DEFAULT '',
  `NAME` varchar(80) DEFAULT ''  
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

集团

CREATE TABLE IF NOT EXISTS `groupe` (
  `GROUPE_ID` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  `NAME_GROUPE` varchar(50) NOT NULL DEFAULT ''  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

有机体组

 CREATE TABLE IF NOT EXISTS  `organisme_groupe`(
      `ORGANISME_ID` int(10) NOT NULL,
      `GROUPE_ID` int(10) NOT NULL,
       PRIMARY KEY (ORGANISME_ID, GROUPE_ID)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

约束

ALTER TABLE `organisme_groupe`
  ADD CONSTRAINT `FK_organisme_groupe_1` FOREIGN KEY (`ORGANISME_ID`) REFERENCES `organisme` (`ORGANISME_ID`)  ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_organisme_groupe_2` FOREIGN KEY (`GROUPE_ID`) REFERENCES `groupe` (`GROUPE_ID`)  ON DELETE CASCADE ON UPDATE CASCADE;

【问题讨论】:

  • 你的意思是:删除organisme时,删除organisme_groupe,但保留groupe。删除groupe时,删除organisme_groupe,但保留organisme。
  • 你的理解是正确的。您的架构定义是正确的。这应该像您所说的那样工作,与您所链接的问题中的情况相同。你能告诉我们删除一个有机体的查询,它也删除了一些组吗?
  • @JohnWoo 但中间表将保留已删除生物体/组的 ID。
  • @Moh:你自相矛盾。 mikespook 是否完全正确?您能否以与 mikespook 的评论相同的形式指定您想要的行为以及您看到的行为?
  • @mikespook,是的,这正是我要找的

标签: mysql hibernate many-to-many cascading-deletes


【解决方案1】:

MySql 映射是正确的,问题是我在 Hibernate 模型中添加了 Cascading 注释,这似乎覆盖了 MySQL 约束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多