更改外键会产生新行

时间:2011-02-17 08:25:47

标签: java mysql eclipselink

我目前正在开发基于MySQL数据库的第一个Java应用程序。我正在使用EclipseLink2.0和NetBeans,当时我正面临一种我无法解释的行为,也许有人在过去偶然发现了这个问题,可以帮助我解决这个问题。这是:

表1将表2的PK作为Fk。在应用程序方面,有一个UI,用户可以在其中为表1生成内容。使用下拉菜单选择fk(Table2ID)的值,该菜单通过读取table2行的Collection来获取每个值。现在,当我尝试将fk的值更改为另一个(已存在的)值时,而不是仅仅这样做,在table2上生成具有新ID的新行,所有其他列值都从我尝试的行克隆将Fk更改为。因此,例如,当我尝试将table1行3,4和5设置为table1.fkcolumn = 6(即Table2ID = 6)时,程序将克隆ID = 6 3次的行,并将每个table1列设置为其中之一。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题是您正在更改实体的主键。在EclipseLink中,当您更改实体的PK时,您将拥有一个新实体。因此,Eclipselink会插入新行并单独留下旧行。

要解决这个问题,您有三种选择: 1)更改数据库。主键真的不应该改变。 2)将应用程序设置为执行更新查询,更新主键值并重新查询它们。 3)删除旧行并使用新主键重新创建。