0

是否可以更新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));
4

4 回答 4

0

您可以执行以下操作:

  1. 禁用外键约束。

  2. 更新 ID/参考

  3. 启用外键约束。

于 2013-08-08T08:33:11.480 回答
0

你不能不改变约束。

这是数据库的限制,而不是休眠的限制。

当您更改idMasterid列时,从站的列没有参考。

如果您尝试更改id从表的 s,情况也是如此。

另外,您为什么要尝试更改主键?这是非常不寻常的。

于 2013-08-08T08:33:39.847 回答
0

更改主键是非常糟糕的做法。

不能只新建一条Master记录,让slave指向新记录,然后删除旧记录。这将在 Hibernate 中工作,不需要纯 SQL 或禁用约束。

于 2013-08-08T08:41:32.253 回答
0

首先,更改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**);

这样,每当您更改 Master 表中的 ID 列时,它将自动级联到所有引用列。

于 2013-08-08T08:43:55.250 回答