[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 注意 假設我們的環境...