我有一個簡單的編輯器UI用於在數據庫表上執行CRUD。 在休眠5.1下,過程如下:如何堅持一個分離的對象?
- 創建會話。讀入數據對象。關閉會話,分離對象。
- 使用分離的對象填充UI小部件。
- 允許用戶添加/編輯/刪除UI中的條目,修改分離的對象。
- 在用戶「保存」操作上:創建一個新的會話。使用saveOrUpdate()持久保存新的/更新的對象。關閉會議。
- 根據需要重複。
Hibernate 5.2強烈建議從Hibernate本地API移到JPA API。 JPA不允許您重新附加分離的對象。
有幾個解決方法:
- 使用展開來從JPA的EntityManager Hibernate的Session,並用它來調用saveOrUpdate。我不喜歡這個選項,因爲它依賴於不屬於JPA的功能。
- 使用JPA合併,它將更新持久對象,儘管我必須確保我不會破壞任何關聯。這給了我兩個同樣的對象,一個持續着,一個分開......這是混亂的。
- 執行手動合併操作,將分離對象中的修改字段複製到持久對象。這是額外的工作。
- 在整個過程中保持單個EntityManager實例處於活動狀態。不幸的是,其他線程可以在此會話仍處於打開狀態時執行CRUD操作,從而使持久性上下文與數據庫表不同步。所以我也不喜歡這種方法。
有沒有什麼好的方法可以做到這一點,或者這些是唯一的選擇?
同意,合併是這裏最好的選擇。 +1 – StanislavL