繁体   English   中英

级联删除具有非级联外键的行

[英]Cascade delete rows with non-cascading foreign keys

我有一个带有一些外键的数据库,这些外键没有配置ON DELETE CASCADE 如果可能,我想避免更改此设置。 同样,我们的 JPA 关系没有配置为cascade = CascadeType.REMOVE

是否仍然可以“以级联模式”删除实体,即为其子项自动生成所有必要的删除查询?

理想情况下,我想通过 JPA 来完成,但原始 SQL 查询也可以。 主要问题是并非所有(但大多数)外键约束都反映在 JPA 关系中,如OneToOneOneToMany等。

我不知道 JPA,所以请注意下面代码中的美元符号,它们表示变量。 因此,正如已经建议的那样,您可能正在编写级联作为触发器。

如果您需要对将使用的某些逻辑进行增强:

说你有:

  • table_1 ,主要实体表
  • table_2 ,与table_1一对多关系的“多”表

...并且table_1有一个到table_2的 FKEY :

delete from table_2 where id in (select table_2_id from table_1 where id = $table_1_id)

或者说 FKEY 在对面的桌子上:

delete from table_2 where table_1_id = $table_1_id

或者说你有:

  • table_1 ,主要实体
  • table_2 ,与table_1具有多对多关系的关联实体表
  • link_table ,它通过仅包含两个 FKEY 和一个行 ID 来记录多对多关联
  • 由于 M2M 关系,您只想删除关联
delete from link_table where table_1_id = $table_1_id

或者也许这是一些主记录,多对多关系应该级联删除......

delete from table_2 where id in (select table_2_id from link_table where table_1_id = $table_1_id);
delete from link_table where table_1_id = $table_1_id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM