电竞比分网-中国电竞赛事及体育赛事平台

分享

Hibernate中update()和merge()的區(qū)別

 為什么圖書館13 2016-06-27
初學(xué)hibernate時(shí),對(duì)于session中的update()和merge()兩個(gè)方法,很容易搞混,覺得兩種都能用,有時(shí)候,又覺得不知道該用哪一種。
實(shí)際上,這兩個(gè)方法,是有很大區(qū)別的
首先,對(duì)于一個(gè)處于detatch狀態(tài)的實(shí)體對(duì)象來說,要將其中的修改,合并到數(shù)據(jù)庫中,有兩種方法,一種方式,是調(diào)用update(),另一種方式是調(diào)用merge()
當(dāng)調(diào)用update()時(shí),首先要取保目標(biāo)session中,不包含同樣id的實(shí)體對(duì)象的引用,如果有的話,會(huì)拋出異常,完成update()方法后,這個(gè)實(shí)體對(duì)象從detatch狀態(tài),轉(zhuǎn)換為persistent狀態(tài),在session提交前,后續(xù)對(duì)其的修改,都會(huì)被合并到數(shù)據(jù)庫中。
當(dāng)調(diào)用merge()對(duì)象時(shí),無需考慮session中是否已經(jīng)包含同樣id的實(shí)體對(duì)象,如果session中沒有同樣id的實(shí)體對(duì)象,hibernate會(huì)通過select語句,從數(shù)據(jù)庫中查詢出對(duì)應(yīng)對(duì)象,如果數(shù)據(jù)庫中沒有對(duì)應(yīng)對(duì)象,就新建一個(gè)。同時(shí),完成merge()操作后,會(huì)返回?cái)?shù)據(jù)庫中對(duì)應(yīng)的persistent狀態(tài)對(duì)象,而原有的,作為參數(shù)傳入的實(shí)體對(duì)象,仍然是detatch狀態(tài),后續(xù)代碼對(duì)其的修改,無法合并到數(shù)據(jù)庫中。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多