2012-03-15 88 views
0

我正在使用primefaces 3.2單元格編輯組件更新具有複合主鍵的Oracle數據庫表格。用戶應該能夠也編輯的主鍵值,但以這種方式,如果我使用primefaces使用複合主鍵在表格中編輯單元格

em.merge(entity); 

我有以下錯誤

Exception [EclipseLink-7251] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: The attribute [voce] of class [entity.competenze_distaccati.CompetenzeDistaccatiPK] is mapped to a primary key column in the database. Updates are not allowed. 

...這聽起來合理的給我。問題是:我如何給用戶改變主鍵值的可能性? rowEdit事件偵聽器是用更改的值調用的,所以我不知道哪個是執行delete-insert的原始記錄。

回答

2

允許修改主鍵不正確處理數據的方式。相反,允許刪除並再次添加記錄與所需的值。這樣,你將會遵循標準,並且你的問題也會得到解決。

+0

謝謝,使用你的建議,我仍然允許用戶修改pk,但修改後的記錄列表不會立即複製到數據庫,而是在提交用戶命令之後。這樣,在提交我做:listOfRecordToRemove = listFromDB.removeAll(listEdited),而listOfRecordToInsert = listEdited.removeAll(listFromDB)。只知道要更新的記錄我有一個由rowEdit事件監聽器填充的HashSet。這對我有用。 – maxqua72 2012-03-19 07:32:26