1. 程式人生 > >hibernate saveOrUpdate方法和merge的區別

hibernate saveOrUpdate方法和merge的區別

首先 saveOrUpdate返回void 也就是什麼都不返回 而merge會返回一個物件

其次 saveOrUpdate的做法是:將物件持久化,如果此時session快取中存在相同id的物件,則報錯;否則如果沒有id就儲存;有id的話,能找到這個id的物件就修改或者找不到就儲存

merge 在執行session.merge(a)程式碼後,a物件仍然不是持久化狀態,a物件仍然不會被關聯到Session上 而update會持久化物件

說白了:merge()用法替代了hibernate早期版本的saveOrUpdateCopy,因此該方法的作用只是將當前物件資訊儲存到資料庫,並且不會將物件轉換成持久化狀態。

merge 和saveOrUpdate不一樣,當session中某持久化物件有id相同的兩個紀錄時,必須用merge,merge會在儲存之前來合併記錄,不然會報錯。合併記錄後的動作和saveOrUpdate一樣。

相關推薦

hibernate saveOrUpdate方法merge區別

首先 saveOrUpdate返回void 也就是什麼都不返回 而merge會返回一個物件 其次 saveOrUpdate的做法是:將物件持久化,如果此時session快取中存在相同id的物件,則報錯;否則如果沒有id就儲存;有id的話,能找到這個id的物件就修改或者找

Hibernate的load()get()區別

其他 其它 分享 sta log exce 沒有 pre alt 最近在用Hibernate的時候發現一個問題:比如我們從數據庫獲得一個對象時,使用session.get()方法還是session.load()? 兩種方法在獲得一個實體對象時是有區別的,在查詢性能上兩者是

原生js中slice()方法splice()區別

ole pre 結束 兩個 object splice 區別 沒有 slice slice()方法和splice()方法都是原生js中對數組操作的方法。 slice(),返回一個新的數組,該方法可從已有的數組中返回選定的元素。例如:arrObject(start,end

Math.round(),增強for迴圈,equals方法==的區別,,instanceof運算子三目運算子的用法

1.Math.round() 有這樣一個問題,將數字23.4,23.6轉換成int型,得到的新數字是多少? 事實上直接轉換的話得到的數字都是23。但在我們程式設計的過程中有時候需要對數字進行四捨五入取整,那麼顯然上面的直接轉換就不能實現我們的要求。但好在java裡面給我提供了一個可以實現四捨五入

Java HttpServletRequest中getAttribute()方法getParameter()區別

  一、ServletRequest介面   HttpServletRequest介面繼承了ServletRequest介面,實現類通常代表一個實際的Http Request。   Servlet容器負責建立一個HttpServletRequest物件(在Web伺服器接收到瀏覽器的一個請求後),然後Ser

Java 的equals()方法 == 的區別聯絡

淺談Java中的equals和==  在初學Java時,可能會經常碰到下面的程式碼: String str1 = new String("hello"); String str2 = new String("hello"); System.out.print

initialize方法init區別詳解

原創帖子,轉載請註明出處:http://blog.csdn.net/sbvfhp/article/details/47857851 1、定義Father類 // // Father.m // // Created by 李建 on 15/8/22. //

group by, where, having的使用方法之間區別

select 後的欄位,必須要麼包含在group by中,要麼包含在having後的聚合函式裡。(?) 1、group by是分組查詢,一般group by是和聚合函式配合使用       group by有一個原則,就是select後面的所有列中,沒有使用聚合函式的列,必

Hibernate中Session之getload方法的真正區別

repl .get user href 獲得 tno lose 錯誤 ftw 最近在學習SHH框架中的hibernate,對Session的get和load方法,有點混不清楚,不知道區別在哪,或者對它們的區別感觸不深。所以百度了一下,結果問題來了。百度的結果和實際測試

hibernate中懶加載急加載的區別,get方法load方的區別

() session 執行 語句 style 開啟 異常 方式 速度 懶加載是hibernate中的關聯關系對象的默認方式,懶加載也會先去查詢對象然後獲取對象的id, 當正真要對數據進行使用時才會正真寫sql語句。 懶加載的有效加載期是在session打開的時候,所以在我們

Hibernate中get方法load方法區別

pub 機制 否則 on() color 檢索 不存在 bsp 數據庫查詢 1.從返回結果上對比: load方式檢索不到的話會拋出org.hibernate.ObjectNotFoundException異常; get方法檢索不到的話會返回null; 2.從檢索執行機制上對

hibernate的get方法load方法區別

返回 exception 二級緩存 查詢 get方法 機制 als 分情況討論 如果 讀者需註意:Hibernate版本不同,運行機制不太一樣,以下是hibernate3.x作為講解 get方法:   Hibernate會確認一下該id對應的數據是否存在,首先在sessio

Hibernate中getload方法區別

load方法可返回沒有載入實體資料的代理類例項,而get方法永遠返回有實體資料的物件。(對於load和get方法返回型別:好多書中都說:“get方法永遠只返回實體類”,實際上並不正確,get方法如果在session快取中找到了該id對應的物件,如果剛好該物件前面是被代理過的,如被load方法使用過,或者被其他

hibernate的getload方法區別

get和load方法的區別 返回的資料 由於get方法是無延遲的,所以查不到資料直接返回null load是有延遲,基於延遲的機制,如果找不到資料就報異常 訪問資料庫時機 由於get方法是無延遲

hibernate的loadget方法區別

1)當資料庫不存在對應ID資料時,呼叫load()方法將會丟擲ObjectNotFoundException異常,get()方法將返回null. 2)也就是延時載入的區別。load的方法預設要載入的物件是存在資料庫中的,返回的是一個代理物件而不是一個真正的類例項,當用到具體

Hibernate中get()load()方法區別

在hibernate中我們知道如果要從資料庫中得到一個物件,通常有兩種方式,一種是通過session.get()方法,另一種就是通過session.load()方法,然後其實這兩種方法在獲得一個實體物件時是有區別的,在查詢效能上兩者是不同的。 一.load載入方式 當使用l

Hibernate中的get方法load方法有啥區別

1.執行get方法會立即載入物件,執行load不會立即載入,返回的是一個代理物件 下圖是兩個方法執行的結果,是相同的,這是因為c物件都被用到了 下圖是執行get方法,沒有用到c物件,但是卻傳送了sq

hibernate 的 getload方法區別

1.get()採用立即載入方式,而load()採用延遲載入; get()方法執行的時候,會立即向資料庫發出查詢語句, 而load()方法返回的是一個代理(此代理中只有一個id屬性),只有等真正使用該物件屬性的時候,才會

hibernate中executeFind()方法execute()方法區別

返回型別不同:executeFind()方法返回集合,execute()方法返回物件 轉載地址 executeFind方法 @Override public List<TCpContact> getCpContactByPage(final Map<

spring的InitializingBean的 afterPropertiesSet 方法 init-method配置的區別聯系

def abs stat 說明 method dex pri 方法 nco InitializingBean Spirng的InitializingBean為bean提供了定義初始化方法的方式。InitializingBean是一個接口,它僅僅包含一個方法:aft