bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Hibernate中merge()方法的作用是什么

Hibernate中merge()方法的作用是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于做網站、網站制作、龍山網絡推廣、小程序制作、龍山網絡營銷、龍山企業策劃、龍山品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯為所有大學生創業者提供龍山建站搭建服務,24小時服務熱線:028-86922220,官方網址:vcdvsql.cn

具體的實現過程如下:

背景:
◆Account 和 Group 兩個對象,設置了雙向的many-to-many關系,lazy=true

◆不使用open session in view 模式

◆不使用hibernate二級緩

◆考慮web應用場景,設置account和group關聯時,只需要group和account的id就夠了。

◆數據庫中存在兩個group: 1.administrators, 2.engineers而po對象中,group信息為:1.invalid, 2.any one

代碼A:

Account account = (Account) getHibernateTemplate().merge(po);     Long id = account.getId();     System.out.println("\tGet obj after added in dao start ...");     Account readAccount = (Account) getHibernateTemplate().get(         Account.class, id);     System.out.println("\tGet obj after added in dao end ...");     System.out.println("\tIs po==readAccount ? " + (po == readAccount));     System.out.println("\tShow detai of po: " + po.toDetailString());     System.out.println("\tShow detai of readAccount: " + readAccount.toDetailString());

其中,為po設置了兩個group 輸出結果:

Hibernate: select ... from SYS_GROUPS where ID=?     Hibernate: select ... from SYS_GROUPS where ID=?         Get obj after added in dao start ...         Get obj after added in dao end ...         Is po==readAccount ? false        Show detai of po: Account[0.account_22, groups[2.any one 1.invalid ]]         Show detai of readAccount: Account[22.account_22, groups[2.engineers 1.administrators ]]     Hibernate: insert into SYS_ACCOUNTS (...) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)

代碼B:

Long id = (Long) getHibernateTemplate().save(po);     System.out.println("\tGet obj after added in dao start ...");     Group group = (Group)getHibernateTemplate().get(Group.class,new Long(1));     System.out.println("\tGroup detai:" + group.toString());     Account readAccount = (Account) getHibernateTemplate().get(         Account.class, id);     System.out.println("\tGet obj after added in dao end ...");     System.out.println("\tIs po==readAccount ? " + (po == readAccount));     System.out.println("\tShow detai of po: " + po.toDetailString());     System.out.println("\tShow detai of readAccount: "        + readAccount.toDetailString());         getHibernateTemplate().merge(readAccount);     Account readAgain = (Account) getHibernateTemplate().get(Account.class,         id);     System.out.println("\tIs po==readAgain ? " + (readAgain == po));     System.out.println("\tIs readAgain== readAccount? "        + (readAgain == readAccount));     System.out.println("\tShow detai again: " + readAgain.toDetailString());

輸出結果:

    Get obj after added in dao start ...     Hibernate: select ... from SYS_GROUPS where ID=?         Group detai:Group 1. administrators         Get obj after added in dao end ...         Is po==readAccount ? true        Show detai of po: Account[27.account_27, groups[1.invalid 2.any one ]]         Show detai of readAccount: Account[27.account_27, groups[1.invalid 2.any one ]]     Hibernate: select ... from SYS_GROUPS where ID=?         Is po==readAgain ? true        Is readAgain== readAccount? true        Show detai again: Account[27.account_27, groups[1.administrators 2.engineers ]]     Hibernate: insert into SYS_ACCOUNTS (...) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)     Hibernate: insert into SYS_GROUP_MEMBER (ACCOUNT_ID, GROUP_ID) values (?, ?)

結論:

1. Hibernate merge()方法會導致執行查詢group對象的select語句,在調用merge()命令時立即執行(條件:目標group對象沒有被緩存)

2. 無論Hibernate merge()或save()方法,insert語句都在***執行,并非在調用相應命令時立即執行

3. 直接調用merge()方法時,會返回一個新的instance,原po保持不變

4. save()之后,po中的group對象并沒有被關聯到session,因此查詢group(id=1)會觸發select語句

5. save()之后,po對象被關聯到session,再次查詢,不會觸發select語句,并且不會檢查group對象是否被關聯到session

6. save()之后再調用merge,返回的是同一個instance,但其關聯group對象會被更新

如果在add一個對象之后,如果存在關聯對象,并且需要再同一個hibernate session中進行回顯,則建議使用Hibernate merge()方法。

看完上述內容,你們掌握Hibernate中merge()方法的作用是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!

本文名稱:Hibernate中merge()方法的作用是什么
標題鏈接:http://vcdvsql.cn/article16/peeogg.html

成都網站建設公司_創新互聯,為您提供手機網站建設自適應網站企業網站制作網站營銷靜態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司