![](/img/trans.png)
[英]Primary key not updating when inserting data to database using hibernate
[英]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));
您可以執行以下操作:
禁用外鍵約束。
更新ID /參考
啟用外鍵約束。
您不能不更改約束。
這是數據庫的限制,而不是休眠的限制。
當您更改id
表的Master
的id
奴隸的列沒有引用。
如果您嘗試更改從屬表的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.