我試着去刪除它具有像一個獨特的PK實體後添加一個類似的實體:80253刪除一個實體,但使用相同的主鍵清除
我做的代碼後續的行刪除此實體:
myEntityType1 = getEntityManager().find(MyEntityType1.class, 80253);
getEntityManager().remove(myEntityType1);
getEntityManager().flush();
這些代碼段實際上從我的數據庫及其所有級聯對象中正確刪除行,我對此非常高興。現在,當我現在需要創建一個使用相同主鍵的類似實體時(現在應該正確?),問題就會出現。
MyEntityType2 myEntityType2 = new MyEntityType2();
myEntityType2.copyData(myEntityType1); //access the data from the other object
//and retrieves the id 80253. myEntityType2 now has 80253 as ID.
getEntitymanager().persist(myEntityType2);
現在這是我得到一個唯一約束SQL錯誤的地方。我試圖插入一個已存在的ID,並且這些更改會自動回滾(舊的實體不再被刪除)。我在記錄器中看到toplink刪除了舊實體的記錄後,會發生這種情況。
有誰知道這是怎麼發生的,爲什麼它不工作?對於記錄我試圖合併,關閉,清理entityManager,但似乎沒有任何工作。
在我看來,JPA可能會做一些不好的緩存或什麼。我希望有人對我有好的迴應! =)
更新:即使世界不再有唯一的ID限制的問題,但我創建已被刪除我得到下面的異常相同主鍵的新的子類:
Exception Description: Trying to invoke [setApprovedWhen] on the object [null]. The
number of actual and formal parameters differs, or an unwrapping conversion has failed.
Internal Exception: java.lang.IllegalArgumentException: object is not an instance of
declaring class
似乎對我來說,它不會讓我把對象變成不同的子類?
在上面的代碼我除去myEntityType1這樣的: myEntityType1 = getEntityManager()找到(MyEntityType1.class,80253); getEntityManager()。remove(myEntityType1); getEntityManager()。flush(); – 2009-09-01 10:09:37
在刪除reight之前複製對象? – 2009-09-01 10:13:05
對象本身從不被刪除,但它不應該存在於數據庫權利?所以JPA調用INSERT INTO查詢PK不應該在數據庫中。我剛剛發現了這個tho:「就像持久和合並方法一樣,DELETE(em。刪除)聲明不一定立即發佈,但保證在某一時刻發佈「...這可能是我的邏輯失敗的地方,我認爲flush會迫使它立即運行tho? – 2009-09-01 10:16:23