簡體   English   中英

休眠更新主鍵

[英]Hibernate updating primary key

是否可以更新具有多個表映射primary key 如何更新表中的ID

CREATE TABLE Master (id INT, name VARCHAR(20),address VARCHAR(20),Primary key(id));

CREATE TABLE Slave_1 (id INT,s1_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s1_id),Foreign Key (id) references Master(id));

CREATE TABLE Slave_2 (id INT,s2_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s2_id),Foreign Key (id) references Master(id));

您可以執行以下操作:

  1. 禁用外鍵約束。

  2. 更新ID /參考

  3. 啟用外鍵約束。

您不能不更改約束。

這是數據庫的限制,而不是休眠的限制。

當您更改id表的Masterid奴隸的列沒有引用。

如果您嘗試更改從屬表的id ,則將是相同的。

另外,為什么還要嘗試更改主鍵? 這是非常不尋常的。

更改主鍵是非常不好的做法。

您不能只創建一個新的主記錄,讓從屬指向新記錄,然后刪除舊記錄。 這將在Hibernate中工作,而無需純SQL或禁用約束。

首先,更改ID是通常沒有人要做的事情。 但是,如果有任何原因,則無法使用Hibernate(即映射類)來完成。 如果您嘗試更改實體ID,Hibernate將無法忍受並引發錯誤。

要進行更改,您必須使用本機查詢。 可能最安全,最簡單的方法是讓數據庫為您完成這項工作。 您只需要為外鍵列定義“更新時級聯”操作。

CREATE TABLE Master (id INT, name VARCHAR(20),address VARCHAR(20),Primary key(id));

CREATE TABLE Slave_1 (id INT,s1_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s1_id),Foreign Key (id) references Master(id) **on update cascade**);

CREATE TABLE Slave_2 (id INT,s2_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s2_id),Foreign Key (id) references Master(id) **on update cascade**);

這樣,每當您更改主表中的ID列時,它將自動級聯到所有引用列。

暫無
暫無

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

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