Java Spring引导休眠删除级联数据
我有一个正确的从数据库中删除数据的问题。 我在我的spring启动应用程序中使用Hibernate orm,现在是我想要从db中删除用户的时刻。但是有realations和一些表包含父表用户的外键。如何删除所有链接在外键的数据? 这里是我的所有表:与键的列的名称:Java Spring引导休眠删除级联数据
- 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的框架,你可以简单地设置了约束的数据库表的外键列,以删除所有相关记录时, “用户”记录被删除。约束被称为ON DELETE CASCADE
,如果您在连接表的外键列上定义它,则RDBMS将自动删除外键与已删除记录的选定用户ID匹配的所有记录。
请尝试对ON DELETE CASCADE
约束专门针对您正在使用的数据库服务器进行一些研究,以获取更多详细信息。
(编辑#2) 下面是从一个MySQL documentation改性例如:
CREATE TABLE product (
category INT NOT NULL, id INT NOT NULL,
price DECIMAL,
PRIMARY KEY(category, id)
) ENGINE=INNODB;
CREATE TABLE customer (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE product_order (
no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(no),
INDEX (product_category, product_id),
INDEX (customer_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON DELETE CASCADE,
FOREIGN KEY (customer_id)
REFERENCES customer(id)
) ENGINE=INNODB;
的例子显示product
和product_order
之间的关系。从product
表中删除记录时(只是简单地运行DELETE FROM product WHERE id=... and category=...
),product_order
表中的所有引用记录都将自动删除,而不会有任何其他SQL语句。 另一方面,从customer
表中删除一行时,您将得到与现在相同的错误,因为默认约束会限制该情况下记录的删除操作。
感谢您的回答。你能写我的数据的示例查询,我已经在上面的代码中提到过吗?谢谢! – johnson
您是否在模型中使用关系注释? 这样,
@OneToMany(级联= CascadeType.REMOVE)
参考规范https://docs.oracle.com/cd/E19798-01/821-1841/bnbqm/index.html
你没有说你的实体关系东西。你是如何绘制它们的?什么是“级联”策略或其他东西? –