2015-11-02 19 views
0

我們已經意識到我們項目中的一些類使得用戶 em.persist(Book);更新現有的圖書記錄。調用jpa堅持分離的實體不會插入重複的行。爲什麼?

第一本書被檢索

em.find(id); 

然後字段通過用戶輸入修改,然後持續

em.persist(書);

雖然這工作正常,但沒有任何問題,直到現在它讓我很好奇,因爲我期望JPA在調用em.persist時插入帶有不同ID的新書。當分離對象引用時,我找不到任何有關persist方法行爲的資源。已通過。

在此先感謝

public void A() throws Exception{ // bean method 

     try { 

     oEntity=oServis.findById(kesintiLogEntity.getOrtaklikId()); //Transactional spring service method returns an existing record 
     oEntity.setOrtakSureAy(ortakEntity.getOrtakSureAy()-1);//modify detached object 
     oServis.saveOrtak(oEntity); //em.persist(oEntity); 
} 
catch (Exception e){ 
} 
} 
+2

請添加一個示例代碼,'persist'應該爲持久存在的實體拋出一個'EntityExistsException'。 – Smutje

+0

有人可以解釋爲什麼我的問題評爲-1? – desperado06

+0

也許是因爲你沒有附加任何最小的工作示例。 – Smutje

回答

0

它工作得很好,因爲你的查找方法抓住與ID字段中的現有項目,如果你想新的對象只需要創建一個新的對象,然後將複製對象,你找到的值,然後堅持新創建的對象

編輯:

請看看這裏是一個很好的說明圖實體狀態 http://www.objectdb.com/java/jpa/persistence/managed

+0

確保不要複製課程ID! – Gimby

+0

感謝您的回覆我已經添加了上面提到的代碼,我們根本不需要一個新的對象,只是試圖從db中獲取的分離實體傳遞時獲得對persist()的行爲更深入的瞭解。 – desperado06

相關問題