想象一下,我有一個被許多其他實體引用的hibernate實體。現在我創建一個新的實體,並且我希望新實體能夠吸引舊實體的位置,所以它被別人引用代替舊實體。在休眠狀態下更新對實體的引用的最佳方式
這樣做的最好方法是什麼?
想象一下,我有一個被許多其他實體引用的hibernate實體。現在我創建一個新的實體,並且我希望新實體能夠吸引舊實體的位置,所以它被別人引用代替舊實體。在休眠狀態下更新對實體的引用的最佳方式
這樣做的最好方法是什麼?
我認爲你應該深拷貝(這是你永遠不會這樣做的原始實體)將state屬性設置爲刪除並使得hibernate更新實體。然後對複製的實體進行任何修改並使hibernate保存該實體。結果將是原始實體將被刪除,複製將被添加爲新的原始參考。
有一個像uther.lightbringer這樣的活動/非活動策略是很常見的,因爲各種原因,所有實體都保留在表中。甚至還有一派思想不應該刪除。這對於時間相關的報告和一些審計方法尤其重要。 – 2011-05-26 22:10:26
編輯我的答案。我忽視了他想保留原始實體的事實。 – Eduard 2011-05-27 06:51:50
最簡單的方法是在參考實體使用更新語句,例如:
update ReferringEntity re set re.entity.id = :newId where re.entity.id = :oldId
試圖解釋爲什麼你需要做到這一點?你的意思是新的新實例? – Eduard 2011-05-26 08:13:21
我想將一些實體標記爲已刪除,因此它們不會完全消失。我只需要插入一個新的實體來代替舊的,現在已經過時的實體。 – Jarek 2011-05-26 10:23:17