我正在使用JPA 2.0開發Web應用程序,並且在每個請求上打開和關閉EntityManager。用戶可以創建一個新的實體,並設置id字段(該字段有意義,我不能更改表結構)。爲了存儲新實體,我必須使用EntityManager的「合併」方法,但是當已經存在具有相同id的現有實體時,它就會被更新。 我是否必須手動檢查是否已經存在具有相同ID的實體,或者可以以更好的方式完成此操作?或者我的方法有什麼不對嗎?JPA:使用現有ID合併實體
回答
如果您使用persist
方法,將會爲重複的ID引發EntityPersistsException
。
這就是說,從用戶的角度來說,他越早知道一個ID已經被使用,越好(最好是,當字段更新檢查它與ajax)。
我不能使用持久性,因爲我在每個請求上創建我的entitymanager實例。例如。在第一個請求中,我讀取要在表中顯示的實體,在第二個請求中存儲新創建的實體。 – user1969951
爲每個請求創建一個新對象。如果我理解正確,那麼您只是添加新的實體,並且不希望對已經在數據庫中的實體持續進行更改。不要使用分離的實體作爲存儲新值的對象。 – SJuan76
我對JPA沒有多少經驗,但afaik我不得不使用合併來附加一個實體(我已經在做)。也許你可以澄清一點? – user1969951
- 1. 合併後獲取實體JPA ID?
- 2. JPA實體使用整數ID
- 3. 如何獲得合併的JPA實體的ID
- 4. jpa合併非託管實體
- 5. 合併JPA實體返回舊值
- 6. 合併VS找到更新實體JPA
- 7. JPA合併@OneToOne實體關係
- 8. JPA - 包括沒有id列的實體
- 9. JPA實體問題ID
- 10. JPA和子類ID合併
- 11. 使用JBoss Seam的EntityHome合併JPA實體
- 12. 帶引用類ID的JPA實體
- 13. 實體使用現有的ID添加新的ID
- 14. JPA沒有合併既不沖洗我的實體
- 15. JPA被管實體合併操作沒有級聯選項
- 16. 使用具有GWT + EJB + JPA的實體
- 17. JPA(使用Hibernate)reatach現有實體在@OneToMany -
- 18. 使用roo從現有的JPA實體生成CRUD
- 19. JPA創建現有實體的修剪實體版本
- 20. 使用JPA刪除實體
- 21. deveoping實體類使用JPA
- 22. 使用JPA實體監聽堅持JPA實體
- 23. JPA實體複合索引集合
- 24. 使用JPA時實現MVC
- 25. 直到JPA實體合併爲止,Bean驗證不起作用
- 26. 在JPA實體上實現「觸摸」?
- 27. 定製JPA實現//現有無SQL JPA實現
- 28. 使用netbeans從dataBase實現一對一映射實體類jpa
- 29. JPA find()不加載實體@Id
- 30. JPA通過ID不是實體
爲什麼你「必須使用」merge「-method」?如果實體已經存在,你想要做什麼? –
我無法使用persist,因爲我在每個請求上創建(並關閉)了我的實體管理器實例,因此我的實體已分離。我想阻止用戶更新現有的實體,當他真的想創建一個新的實體。 – user1969951
我不需要用戶合併,我可以使用堅持 - 不知何故,我認爲我不能... – user1969951