01 hibernate merge方法的理解

2021-08-31 14:48:08 字數 995 閱讀 4394

[size=large][color=green] merger()方法,很神奇。它可以用來將乙個託管(detached)的vo(value object)持久化到資料庫,以下是它持久化乙個託管vo的步驟:

1.在持久化上下文(persist context)中查詢與託管vo具有相同id的po(persist object),如果找到,就將託管的vo的值copy給po,然後返回持久化以後的物件;

2.如果在持久化上下文中沒有找到,它就會到資料庫出找,而且是根據託管的vo提供的id查詢,然後就將託管的vo的值copy給po,然後返回持久化以後的物件;

3.如果在資料庫也沒找到和託管的vo對應的記錄,它就會要求new乙個和託管的vo相對應的持久化物件,然後執行拷貝,返回持久化以後的物件。

注意:如果傳給merge()方法的是乙個游離態的(transient)物件,那麼就會按照第三步執行[/color][/size]

/*** 假設資料庫已經存在id為1的user物件

*///瞬時物件

user newuser = new user();

newuser.setusername("admin2");

session.begintransaction();

//持久化物件

user user = (user) session.get(user.class, 1);

//newuser託管物件

newuser.setid(user.getid());

//在記憶體中查詢是否存在跟該託管物件id相匹配的物件,如果匹配,就想託管物件內容複製到記憶體中的物件

session.merge(newuser);

//驗證一:放開下面這句話就結果還是admin2,此時newuser始終都是乙個託管物件

// newuser.setusername("admin3");

session.gettransaction().commit();

01《構建之法》閱讀筆記01

個人感受 我過去的做法 1 寫程式以實現功能為主要目的,所以有時候為了功能的保證,會不太注重演算法的使用。2 在團隊專案中,習慣了個人程式設計,和團隊成員溝通偏少。為什麼這樣不好 1 不注重演算法的使用,會無端的浪費空間和執行時間,使程式效率大大降低。2 團隊成員之間交流過少時,融合會經常出現問題,...

說幹就幹 01

1 爬取了成語大全資料,樣例 包括了成語名稱,拼音,解釋,出處,繁體,簡拼,常用程度,字數,情感色彩,用法,結構,年代,近義詞和反義詞。一共兩萬七千多個成語。2 構建圖譜 用python將爬取的成語構建圖譜資訊,涉及到的python驅動有兩個,neo4j driver和py2neo,還乙個http的...

LEETCODE刷題01 顛倒整數01

為提高自己的專業技術,藝多不壓身,早上吃了飯就去了leetcode看了看,覺得挺有意思的。記錄一下答題過程吧 題目是這樣的 給定乙個範圍為 32 位 int 的整數,將其顛倒。例 1 輸入 123 輸出 321例 2 輸入 123 輸出 321 例 3 輸入 120 輸出 21 注意 假設我們的環境...