2011-02-17 77 views
0

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

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

任何帮助将不胜感激。

+1

你能显示实体映射吗?以及控制器/服务中用于链接实体并保存它们的代码。 – Augusto 2011-02-17 09:24:57

回答

0

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

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