簡體   English   中英

Java Spring boot hibernate 刪除級聯數據

[英]Java Spring boot hibernate delete cascade data

我在從數據庫中正確刪除數據時遇到問題。 我在 Spring Boot 應用程序中使用了 Hibernate orm,現在是我想從數據庫中刪除用戶的時刻。 但是有現實,有些表包含父表用戶的外鍵。 如何刪除所有鏈接的數據在哪里外鍵? 這是我的所有表:以及帶鍵的列的名稱:

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

以及如何刪除所有這些數據的用戶? 感謝您的幫助!

您是否在模型中使用了關系注釋? 像這樣,

@OneToMany(cascade = CascadeType.REMOVE )

請參閱規范https://docs.oracle.com/cd/E19798-01/821-1841/bnbqm/index.html

(已編輯

無需參考 Spring 或 Hibernate 等框架,您可以簡單地設置數據庫表,並對外鍵列進行約束,以便在刪除“用戶”記錄時刪除所有相關記錄。 該約束稱為ON DELETE CASCADE ,如果您在連接表的外鍵列上定義它,RDBMS 將自動刪除外鍵與已刪除記錄的選定用戶 ID 匹配的所有記錄。

嘗試針對您正在使用的數據庫服務器的ON DELETE CASCADE約束進行一些研究,以了解更多詳細信息。

編輯 #2 )這是MySQL 文檔中修改示例:

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表中刪除一行時,您將得到與現在相同的錯誤,因為在這種情況下默認約束限制對記錄的刪除操作。

例如;

 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 注入。 所以你要注意。我想通過一個例子來解釋這里的辦公室和房間。

在 dlete 操作之前和之后禁用和重新啟用外鍵約束怎么樣。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM