2013-10-17 13 views
0

在一個hibernate會話中。兩個附加的hibernate對象引用相同的數據,哪一個會被保存?

我第一次得到一個對象,比方說,通過使用session.get(ID,類)檢索一個記錄,我做了一些改變對象A

然後我用criteria.list作出的檢索()獲取包含對象B的對象列表,該對象列表引用相同的數據對象A引用。我也對對象B做了一些改變。

我提交了會話之後,我所做的更改將會持久保存到數據庫,A還是B還是兩者?

回答

0

每當您從數據庫中獲取某些內容時,它會創建一個新的 對象。即使對象的值相同,它在內部也是 不同。

在這種情況下,如果你只取一次值,並創建該對象的副本 那麼它只是創建對象的引用,所以在第一任 變化也將被反映到第二位。

當您提交更改時,保存的最後一個對象的值將爲 爲表內的值。原因是, 前一個對象的值先被保存,並被 秒覆蓋。

0

無!您將得到一個異常說:org.hibernate.NonUniqueObjectException:具有相同標識符值的不同對象已與會話關聯,除非您使用merge()方法手動管理它們。

相關問題