Java Spring引导休眠删除级联数据

Java Spring引导休眠删除级联数据,java,sql,spring,hibernate,orm,Java,Sql,Spring,Hibernate,Orm,我在从数据库中删除数据时遇到问题。 我在我的spring boot应用程序中使用Hibernate orm,现在是我想从db中删除用户的时候了。但也有一些实现,一些表包含父表用户的外键。如何删除外键所在链接的所有数据? 以下是我的所有表:以及带键的列的名称: - User - id - Workers - id(fk) - Resetkeys - userId(fk) - UserRole - userId(fk) - Tokens - userId(fk) 如何删除所有这些数据的用户? 谢谢

我在从数据库中删除数据时遇到问题。 我在我的spring boot应用程序中使用Hibernate orm,现在是我想从db中删除用户的时候了。但也有一些实现,一些表包含父表用户的外键。如何删除外键所在链接的所有数据? 以下是我的所有表:以及带键的列的名称:

- User - id
- Workers - id(fk)
- Resetkeys - userId(fk)
- UserRole - userId(fk)
- Tokens - userId(fk)
如何删除所有这些数据的用户?
谢谢你的帮助

在dlete操作前后禁用和重新启用外键约束如何

alter table Resetkeys nocheck constraint all
delete from Resetkeys ...
alter table Resetkeys check constraint all
已编辑

在不参考Spring或Hibernate等框架的情况下,您可以简单地使用外键列上的约束设置数据库表,以便在删除“用户”记录时删除所有相关记录。该约束在DELETE CASCADE上称为
,如果在联接表的外键列上定义该约束,RDBMS将自动删除外键与已删除记录的选定用户ID匹配的所有记录

请尝试研究专门针对您正在使用的数据库服务器的
on DELETE CASCADE
约束,以了解更多详细信息

编辑#2) 以下是一个修改后的示例:

该示例显示了
产品
产品订单
之间的关系。从
product
表中删除记录时(只需运行
DELETE from product,其中id=…和category=…
),将自动删除
product\u order
表中的所有引用记录,而无需任何其他SQL语句。
另一方面,当从
customer
表中删除一行时,您将得到与现在相同的错误,因为在这种情况下,默认约束限制了对记录的删除操作。

您是否在模型中使用了关系注释? 像这样,

@OneToMany(级联=级联类型。删除)

例如,参考规范

 DELETE FROM progress FROM progress INNER JOIN offices ON progress.RegNo = offices.RegNo WHERE offices.ProjectID = :id;
    DELETE FROM offices WHERE offices.ProjectID = :id;
    DELETE FROM workrooms WHERE workrooms.ProjectID = :id;

注意:使用参数传递值​​添加到查询,而不是添加值​​直接连接到字符串。如果不这样做,可以将代码公开给SQL注入。所以你必须注意。我想通过一个例子来解释这里的办公室和房间。

否。是否有删除操作?我添加了所有表的名称。为什么使用MyTable@johnson如果表具有外键约束,则不允许删除记录。我所做的:-我禁用了表中约束的检查(Resetkeys),然后在再次删除记录后,我打开了约束检查。这是一个示例,如果您觉得有帮助,您可以对所有表执行。谢谢您的回答。您能为我的数据编写示例查询吗?我在上面的代码中已经提到了这一点?谢谢你没有提到你的实体关系。你是如何绘制它们的?什么是级联
策略或其他内容?我使用了cascade=CascadeType。我已将其更改为CascadeType.REMOVE,将不起作用,还添加了delete cascade to tables
 DELETE FROM progress FROM progress INNER JOIN offices ON progress.RegNo = offices.RegNo WHERE offices.ProjectID = :id;
    DELETE FROM offices WHERE offices.ProjectID = :id;
    DELETE FROM workrooms WHERE workrooms.ProjectID = :id;