2011-02-17 66 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)刪除舊行並用新的主鍵重新創建。