2017-09-25 223 views
0

我有一个正确的从数据库中删除数据的问题。 我在我的spring启动应用程序中使用Hibernate orm,现在是我想要从db中删除用户的时刻。但是有realations和一些表包含父表用户的外键。如何删除所有链接在外键的数据? 这里是我的所有表:与键的列的名称:Java Spring引导休眠删除级联数据

- User - id 
- Workers - id(fk) 
- Resetkeys - userId(fk) 
- UserRole - userId(fk) 
- Tokens - userId(fk) 

,并与所有这些数据如何删除用户? 感谢您的帮助!

+0

你没有说你的实体关系东西。你是如何绘制它们的?什么是“级联”策略或其他东西? –

回答

0

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

alter table Resetkeys nocheck constraint all 
delete from Resetkeys ... 
alter table Resetkeys check constraint all 
+0

不可以。DELETE上有任何操作吗? – johnson

+0

我添加了所有表格的名称为什么使用MyTable – johnson

+0

@johnson如果表具有外键约束,表格不允许删除记录。我做了什么: - 我禁用了检查表中的约束(Resetkeys),然后再次删除记录后,我打开了约束检查。这是一个示例,如果您觉得它有帮助,可以对所有表格执行此操作。 –

0

编辑

没有任何的参考像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; 

的例子显示productproduct_order之间的关系。从product表中删除记录时(只是简单地运行DELETE FROM product WHERE id=... and category=...),product_order表中的所有引用记录都将自动删除,而不会有任何其他SQL语句。 另一方面,从customer表中删除一行时,您将得到与现在相同的错误,因为默认约束会限制该情况下记录的删除操作。

+0

感谢您的回答。你能写我的数据的示例查询,我已经在上面的代码中提到过吗?谢谢! – johnson