2014-04-04 119 views
0

我有一個從DTO轉換的hibernate對象來刪除。因爲這個對象沒有附加到會話中,所以我不能只刪除它,它會導致NotUniqueObjectException,所以我需要合併它,或者在Session中找到等效的對象。什麼是更快,做Session.get()Session.merge()哪個更快,get()或merge()?

更好的是,有沒有一種方法可以首先刪除一個對象而不從Session獲取託管對象?

回答

0

merge()基本上得到的對象,然後將狀態從分離的實例複製到附加的實例,並應用級聯。很明顯,要獲得一個對象,get()不僅更快,而且更合適。

通過使用session.load(),您甚至可以無需查詢數據庫就可以獲得連接的實例,如果對象尚未包含在會話中,它將返回未初始化的代理。

+0

值得注意的是,調用'delete()'與一個不存在於數據庫中的對象的代理將導致'ObjectNotFoundException',就像如果你試圖訪問代理的屬性。 –

+0

[This answer](http://stackoverflow.com/a/608979/297331)是'get()'和'load()'之間區別的一個很好的解釋。 –