2017-09-25 221 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