2011-08-10 37 views
0

我面臨着一個相當基本的問題(據稱是......)。這是我指的結構:使用開放JPA重新創建實體

Structure

我與柔性工作在客戶端,Java的&開放JPA在服務器端和Microsoft SQL Server持久層。

在我的應用程序(在客戶端),可以決定一個客戶端

  1. 參與者
  2. 建議
  3. 不建議。

假設我有'喬'作爲建議的客戶端,現在我將喬轉換爲'不建議'(這是通過簡單地取消檢查檢查nox從客戶端完成)。

在後端,我將刪除當前的Joe實體(建議客戶端),將其id設置爲null,並將其重新創建爲「未建議的客戶端」。類似的東西:

getAdviseeDao().delete(currentPersistedAdvisee); 
currentAdvisee.setId(null); 
getAdviseeDao().create(currentAdvisee); 

我不斷獲取

com.microsoft.sqlserver.jdbc.SQLServerException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_advised_to_clients". The conflict occurred in database "blablabla", table "dbo.participants", column 'id'. 

任何想法,爲什麼這可能發生嗎?

回答

0
getAdviseeDao().delete(currentPersistedAdvisee); 
currentAdvisee.setId(null); 
getAdviseeDao().create(currentAdvisee); 

JPA只是不這樣工作。 不要將ID設置爲空,也不要嘗試將實體重新保留爲其他內容。你會得到奇怪和意外的行爲。我想你應該用聚合而不是繼承。我想我會將建議的部分封裝在Embeddable類中。