五,saveOrUpdateCopy,merge和update區(qū)別
首先說明merge是用來代替saveOrUpdateCopy的,這個詳細見這里 http://www./dreamstone/archive/2007/07/28/133053.html 然后比較update和merge update的作用上邊說了,這里說一下merge的 如果session中存在相同持久化標識(identifier)的實例,用用戶給出的對象的狀態(tài)覆蓋舊有的持久實例 如果session沒有相應的持久實例,則嘗試從數(shù)據(jù)庫中加載,或創(chuàng)建新的持久化實例,最后返回該持久實例 用戶給出的這個對象沒有被關聯(lián)到session上,它依舊是脫管的 重點是最后一句: 當我們使用update的時候,執(zhí)行完成后,我們提供的對象A的狀態(tài)變成持久化狀態(tài) 但當我們使用merge的時候,執(zhí)行完成,我們提供的對象A還是脫管狀態(tài),hibernate或者new了一個B,或者檢索到 一個持久對象B,并把我們提供的對象A的所有的值拷貝到這個B,執(zhí)行完成后B是持久狀態(tài),而我們提供的A還是托管狀態(tài) 六,flush和update區(qū)別 這兩個的區(qū)別好理解 update操作的是在脫管狀態(tài)的對象 而flush是操作的在持久狀態(tài)的對象。 默認情況下,一個持久狀態(tài)的對象是不需要update的,只要你更改了對象的值,等待hibernate flush就自動保存到數(shù)據(jù)庫了。hibernate flush發(fā)生再幾種情況下: 1,調(diào)用某些查詢的時候 2,transaction commit的時候 3,手動調(diào)用flush的時候 七,lock和update區(qū)別 update是把一個已經(jīng)更改過的脫管狀態(tài)的對象變成持久狀態(tài) lock是把一個沒有更改過的脫管狀態(tài)的對象變成持久狀態(tài) 對應更改一個記錄的內(nèi)容,兩個的操作不同: update的操作步驟是: ?。?)更改脫管的對象->調(diào)用update lock的操作步驟是: (2)調(diào)用lock把對象從脫管狀態(tài)變成持久狀態(tài)——>更改持久狀態(tài)的對象的內(nèi)容——>等待flush或者手動flush |
|