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

20 浏览
0 Comments

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

我有一个数据库,其中一些外键配置没有使用ON DELETE CASCADE;如果可能的话,我想避免更改这个配置。同样,我们的JPA关系也没有配置cascade = CascadeType.REMOVE

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

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

0
0 Comments

在JPA中,如果删除一个拥有非级联外键的行,可能会出现级联删除的问题。

解决方法:

1. 如果外键定义在被关联的表上,可以使用以下SQL语句进行级联删除:

delete from table_2 where table_1_id = $table_1_id

2. 如果外键定义在关联表上,可以使用以下SQL语句进行级联删除:

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

3. 如果存在多对多的关系,可以使用以下SQL语句删除关联表中的关联记录:

delete from link_table where table_1_id = $table_1_id

4. 如果希望级联删除多对多关系的记录,可以使用以下SQL语句:

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;

0