问题标签 [cascading-deletes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4964 浏览

nhibernate - NHibernate 多对多关系 - 删除部分关系时的问题

我在团队和员工实体之间有多对多的关系。

我将它们映射如下:

然后我创建了 3 个团队和 2 个员工:

Employee1 还有 2 个 LoanedItems(书籍、杂志)。Employee2 没有 LoanedItems。

现在我想删除 Team1 和 Team3 中的 Employee1。在 Team 1 中也是 Employee2。因此,当我删除 Employee1 时,我假设 Employee1 和 Team3 也被删除,因为我还假设一个 Team 只有在有 Employe 时才能存在,反之亦然。所以Team1可能不会被删除,因为它有Employee2并且可以仍然存在。

我在新会话中使用了以下代码行:

但是会发生什么?-> NHibernate 删除所有团队和所有员工!-> NHibernate 通过将 FK EmployeeID 设置为 NULL 正确更新了我的 LoanedItem 表。

那里有什么问题?

0 投票
2 回答
14056 浏览

mysql - [MySQL]:从两个依赖表中删除行

我正在尝试根据第三个表 ID 删除两个从属表中的所有行。

表结构:

我想从交易/购买中删除与项目中的 Client_ID 匹配的所有行。听起来很简单......即使我可以将我的新手头脑包裹起来......

没有...

我收到此错误foreign key constraint fails...- 我相信你们中的许多人并不感到惊讶。

购买使用 t.Transaction_ID 的问题是什么?- (因此,这个外键会失败)

或者此表中可能还有其他 t.Transaction_ID 相关数据(我还没有找到)。

编辑:COMPLETE ERROR

0 投票
3 回答
7392 浏览

iphone - iPhone Core Data:跨多对一关系的级联删除

我有两个类 A 和 B,从 A 到 B 具有多对一的关系(多个 A 对象可能引用同一个 B)。问题是,如果A端的删除规则是Cascade,那么B只有在最后一个引用A被删除时才会被删除,还是在关联的A第一次被删除时才被删除。如果重要,关系 B 方的删除规则是 Nullify。

此外,我在 Core Data 文档中读到 Optional 标志在某些情况下很重要。但不清楚他们所说明的关系与我的案件有何关系。他们在谈论一个遏制案例(B 归 A 所有),而我的案例是订阅/关联之一(B 与 A 有关)。

我可以简单地在代码中以编程方式管理删除,但如果可能的话,我希望允许 Core Data 做正确的事情。但目前尚不清楚我正在寻找的垃圾收集语义是否在 Core Data 中得到支持。

有什么建议么?

0 投票
1 回答
807 浏览

nhibernate - 删除具有关联子记录的父记录时,Nhibernate 中的意外行数

我有一个父表 Orders 和一个子表 [Order Details],我已将流利的映射设置为 -

(在父 Order 类中)

(在子 [订单详情] 类中)

我试图通过调用来删除父对象 -

这仅在只有一个子记录时才有效,如果有多个子记录,则子记录将被删除,但父记录不会!我得到了可怕的 - 意外的行数错误。

我确信这是我正在做的愚蠢的事情,但是通过网络拖网并没有发现任何东西。

谢谢

0 投票
7 回答
2705 浏览

nhibernate - 如何查找是否可以删除引用的对象?

我有一个名为“客户”的对象,它将在其他表中用作外键。

问题是我想知道是否可以删除“客户”(即,它没有在任何其他表中被引用)。

Nhibernate可以做到这一点吗?

0 投票
5 回答
11409 浏览

sql - 如何从具有外键的三个表中删除?

我希望能够选择一个 groupID 并通过在 MS SQL 服务器数据库中找到的三个表进行级联删除。这些表如下所示:

我在想,既然我知道 groupID,我可能会根据 groupID 从映射表中选择 memberID 并从 member 表中删除它们,但我通常会遇到以下错误:

“DELETE 语句与 REFERENCE 约束冲突...[表中的 FK 约束]”。

谁能给我一些关于同时从所有这三个表中删除的最佳方法的指导?

谢谢。

0 投票
1 回答
6218 浏览

c# - nhibernate 不会级联删除子级

场景如下,

我有 3 个名为Parent 的对象(我简化了名称),父母的孩子和孩子的孩子
父母的孩子是父母的集合,孩子的孩子是孩子的集合。

映射如下(相关部分)

父母

父母的孩子

我想要实现的是,当我删除父级时,会一直级联删除到孩子的孩子。但目前发生的事情是这样的。

(这纯粹是为了映射测试目的)获取父实体(工作正常)

现在删除部分

在通过级联和反转解决了“无法插入空值”错误后,我希望现在可以使用此代码删除所有内容,但只有父级被删除。

我是否错过了我的映射中可能会错过的某些内容?任何正确方向的提示都非常受欢迎!


迭戈,谢谢你的中肯回答。(和解释)

我删除了on-delete="cascade",这是因为我喜欢在代码中而不是在数据库中尽可能多地进行控制。

下面发布的代码是(工作)结果。

父母

父母的孩子

希望这可以帮助有同样问题的人!

0 投票
3 回答
3484 浏览

sql - SQL Sever 2008 中的级联删除不起作用

我有下表设置。

BagCommentRelation 具有 Bag 和 BagComment 的外键。

所以,我为这两个外键打开了级联删除,但是当我删除一个包时,它不会删除评论行。

是否需要为此触发触发器?还是我错过了什么?

(我使用的是 SQL Server 2008)


注意:发布请求的 SQL。这是 BagCommentRelation 表的定义。(我的 bagID 类型错误(我认为它是一个 guid,但它是一个 int)。)

此表中的行会删除,但注释表中的行不会。

0 投票
3 回答
51597 浏览

django - 覆盖 Django 的级联删除行为的选项有哪些?

Django 模型通常可以很好地处理 ON DELETE CASCADE 行为(以一种适用于本机不支持它的数据库的方式。)

但是,我正在努力发现在不合适的情况下覆盖此行为的最佳方法是什么,例如在以下情况下:

  • ON DELETE RESTRICT(即如果对象有子记录,则防止删除该对象)

  • ON DELETE SET NULL(即不删除子记录,而是将其父键设置为 NULL 以破坏关系)

  • 删除记录时更新其他相关数据(例如删除上传的图像文件)

以下是我所知道的实现这些目标的潜在方法:

  • 覆盖模型的delete()方法。虽然这种方法有效,但当通过QuerySet. 此外,每个模型都delete()必须被覆盖以确保 Django 的代码永远不会被调用并且super()不能被调用,因为它可能使用 aQuerySet来删除子对象。

  • 使用信号。这似乎是理想的,因为它们在直接删除模型或通过 QuerySet 删除时被调用。但是,无法阻止删除子对象,因此无法实现 ON CASCADE RESTRICT 或 SET NULL。

  • 使用能够正确处理此问题的数据库引擎(在这种情况下 Django 会做什么?)

  • 等到 Django 支持它(并在此之前与错误一起生活......)

似乎第一个选项是唯一可行的选项,但它很丑陋,会把婴儿和洗澡水一起扔出去,并且在添加新模型/关系时可能会丢失一些东西。

我错过了什么吗?有什么建议吗?

0 投票
1 回答
7843 浏览

c# - 实体框架级联删除问题 - 外键设置为 null

我有以下使用实体框架映射的模型:Mitglied -> Auftrag -> Teilprojekt

我已经使用外键和“删除级联”在数据库中设置了所有内容。如果我对数据库执行一些测试,一切正常。当我使用实体框架添加和删除对象时,问题就出现了。考虑以下代码:

这会正确添加所有对象并设置外键。如果我然后执行以下代码来删除 Auftraege:

正确删除了两个 Auftraege a1 和 a2;Teilprojekt t1 也被删除,但 Teilprojekt t2 没有被删除;

它的 AuftragID 列设置为 NULL!

唯一的区别是,对于 a1,我没有加载 Teilprojekte,而对于 a2,我确实加载了它们。我不明白为什么这不能正常工作。同样在 SSDL 中,一切都设置正确:

如果我将 Teilprojekte 表上的 AuftragsID 设置为不为空,那么我会从实体框架中收到以下错误:

谁能帮助我并告诉我出了什么问题以及如何解决这个问题?谢谢