问题标签 [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 回答
32300 浏览

entity-framework - 您如何确保首先在 EF 代码中对表关系启用级联删除?

我想使用代码优先在表上启用 CASCADE DELETE。从头开始重新创建模型时,即使自动设置了关系,也没有设置 CASCADE DELETE。奇怪的是,它确实为某些具有多对多关系的表启用了此功能,您会认为它可能存在问题。

设置: 表 A <- 表 B。

表 B 的 FK 指向表 A 的 PK。

为什么这行不通?

0 投票
1 回答
2111 浏览

grails - 当belongsTo指定多个类时,Grails belongsTo 级联删除?

我的问题是:如果我创建一个 Dog 实例 D、一个 Owner 实例 O、一个 Sitter 实例 S 并将 D 与 O 和 S 相关联,当 S 被删除时 O 会发生什么?O还会有D吗?因为它是级联删除,所以 S 和 D 都会被删除,对吧?O什么时候会发生什么?还会有D吗?

0 投票
2 回答
2798 浏览

sql - 外键在同一张表时如何在oracle中添加级联删除

我有一个包含 oracle 中的树的表。

当树的根没有父级时,如何添加级联删除?

现在,根的父 ID 设置为 -1。当我尝试这个时,我收到以下错误:

0 投票
1 回答
2022 浏览

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

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

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

...在单向关系中,父端映射为“保存更新”,子端映射为“无”。我已经为双向关系尝试了这些设置,但并不奇怪它不起作用。具体来说:

这是项目类:

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

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

感谢有关此问题的任何意见。

0 投票
4 回答
7311 浏览

sql - SQL '删除级联'

我有一个表 B,它有一个表 A 的外键,现在我想在 A 上做一个“DELETE CASCADE”的事情,但 PostgreSQL 不接受以下内容:

似乎只有 SELECT 可以在IN ()子句内。我想有一些简单的(和标准的 SQL,不是特定于 PostgreSQL 的?)的方法吗?

编辑:当您遇到此类问题时,是否可以肯定地说某些东西的结构很糟糕?在我们的例子中,我有一种直觉认为..[expr]..应该在一个新的 CTAable 中而不是作为 ATable 中的一个子集,但我不能真正指出任何设计范式来支持这一点。

0 投票
1 回答
13071 浏览

java - 休眠级联删除未按预期工作

我正在使用休眠 3 并尝试删除数据库中的记录,但删除没有像我预期的那样工作。模式休眠正在处理(在伪代码中):

我的休眠类映射看起来像:

现在有了这个配置,我正在调用:

正在发生的是:

并引发异常。session.remove(..) 调用的结果是我期望删除的雇主记录,以及与雇主关联的所有员工记录和与已删除员工记录关联的所有 EmployeeRole 记录。这是一个正确的假设吗?还是我在这里误解了一个关键概念?

0 投票
2 回答
140 浏览

sql - SQL表数据结构,这是错的吗?使用级联删除

以下是我遇到问题的 3 个表:

  • 表:机会 - 拥有各种机会(工作)描述

  • 表:Opportunities_Applicants - 持有各种申请机会的申请人。1个申请人只能申请1个机会,但是1个机会可以有多个申请人

  • 表:Opportunities_Category - 保存类别名称和类型。1 类别可能与许多机会相关。

我正在尝试在删除机会类别时执行级联删除,它将删除相应的机会和这些机会的申请人。

这种结构合适还是我应该以不同的方式设置数据库?应该如何设置我的表关系,以便在删除商机类别时使 CASCADING Delete 起作用?

我什至应该使用 CASCADING Delete 吗?

0 投票
3 回答
6334 浏览

sql - 我应该让 JPA 还是数据库级联删除?

假设我们有两个实体,A 和 B。B 与 A 具有多对一的关系,如下所示:

现在,我想删除该A对象并将删除级联到它的所有 children B。有两种方法可以做到这一点:

  1. 添加cascade=CascadeType.ALL, orphanRemoval=true到 OneToMany 注释,让 JPA 在从数据库中删除 A 对象之前删除所有子项。

  2. 让类保持原样,让数据库级联删除。

使用后一个选项有什么问题吗?它会导致实体管理器保留对已删除对象的引用吗?我选择选项二而不是选项一的原因是选项一生成 n+1 个 SQL 查询以进行删除,当对象 A 包含很多子项时,这可能需要很长时间,而选项二仅生成一个 SQL 查询然后继续高兴地。有没有关于这个的“最佳实践”?

0 投票
1 回答
3681 浏览

jpa-2.0 - 删除子项时 JPA 关系未更新

鉴于以下情况:

换句话说:对象 A 和对象 C 都包含许多 B 对象。

当我删除一个 C 对象(从技术上讲,我正在更新一个包含多个 C 对象并使用孤儿删除的对象)时,我希望删除所有引用的 B 对象,这与当前注释一样工作。但是,实体管理器似乎不理解位于其缓存中的对象 A 现在失去了一些孩子。如果我有一个 A 的实例,我当然必须手动更新它的 bList,或者做一个新的查询来更新它,但即使是新获取的 A 对象仍然是过时的。重申:

  • C 对象被删除。
  • 使用 orphanRemoval 将移除级联到 B 对象。
  • 实体管理器中缓存的 A 对象中的 bList未更新
  • 手动清除实体管理器缓存使其检索正确更新的对象。

如何解决?我希望实体管理器自动更新其持久性上下文,或者在@JoinColumn 上提供级联注释,但这里似乎都不是这种情况。

编辑:似乎问题在于对象 A 的 bList 更新时对象 C 的 bList 没有得到更新(因此不能级联更改)。我不知道为什么.. 仍然注意我在谈论持久性上下文而不是实例化对象。

0 投票
2 回答
7427 浏览

c# - nhibernate "cascade="all-delete-orphan" 错误

我的数据库中有 3 个表:

  1. 项目 (ID,名称)
  2. 标签(ID,名称)
  3. ProjectsTagss (id, projectId, tagid)

如您所见,ProjectsTags 表是一个桥接表

这是我流利的 ​​nhibernate 映射

项目地图.cs:

项目TagsMap.cs:

标签映射.cs:

如您所见,我在历史上没有将 Tag 表链接到其他任何内容。我现在需要生成一个报告来显示标签以及该标签的使用频率,因此我需要从标签加入到 ProjectsTag。我尝试将此行添加到标签映射中:

但是当我去更新标签对象上的名称并提交时,我收到了这个错误:

拥有的实体实例不再引用具有 cascade="all-delete-orphan" 的集合

当我简单地更新标签表时,任何人都可以看到我添加的内容有什么问题会导致这个休眠异常。同样,我的目标是能够执行以下操作:

以下是根据要求的一些附加代码:

我的标签类: