Hibernate更新主键

时间:2013-08-08 08:28:30

标签: java mysql hibernate

是否可以更新包含多个表映射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 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

  1. 禁用外键约束。

  2. 更新ID /引用

  3. 启用外键约束。

答案 1 :(得分:0)

你不能不改变约束。

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

当您更改表id的{​​{1}}时,从属的Master列没有引用。

如果您尝试更改从属表的id,则相同。

另外,为什么要尝试更改主键?这很不寻常。

答案 2 :(得分:0)

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

你不能只创建一个新的主记录,让奴隶指向新记录,然后删除旧记录。这将在Hibernate中起作用,而不需要纯SQL或禁用约束。

答案 3 :(得分:0)

首先,改变身份证是人们通常不应该做的事情。但是如果有任何原因,则无法使用Hibernate(即。和映射类)完成。如果您尝试更改实体ID,Hibernate将不会容忍并引发错误。

要进行更改,您必须使用本机查询。也许最安全,最简单的方法就是让DB为您完成工作。您只需要为外键列定义“on update cascade”操作。

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列,它都会自动级联到所有引用列。