我有一個基類,A
,和兩個子類,B
和C
。我有一個B
的實例,我試圖更新並將其類型更改爲C
。包含更新數據的C
的實例是暫時的,因爲我無法想象有修改持久實例的方法。休眠加入子類更新
當瞬態實例從前端傳遞到服務層時,會話開始並進行一些檢查以確保它是有效的操作。在此會話期間,檢索持久實例(B
)。假設一切都檢出,瞬態對象是(應該是)持久。
這似乎是.merge()
是調用正確的方法,但我們得到了一個NonUniqueObjectException,我們彷彿被稱爲.update()
(這也不管用,不應該因爲持久實例目前是在會議) 。
我不知道爲什麼.merge()
是給出了NonUniqueObjectException,因爲我的理解是.merge()
是專門用於這種情況;試圖用臨時實例更新會話中存在的實體。 我的猜測是令人不安的是,持久實例與瞬態實例不同;我測試過了,當我在相同類的瞬態實例上調用.merge()
時,所有內容都按預期工作。
不知道接下來要做什麼,我試着做.evict()
的持久實例,然後.update()
在瞬態的,但是這給了我一個StaleObjectException。在這一點上,我無法想出一個解決方案。我們是在試圖做一些愚蠢的事情,還是會出現某種配置問題?
所以問題是改變子類呢?我有點失望,它不受支持。 –
是的。無論如何,你怎麼能用Java來做到這一點?你不能。 – cherouvim