Hibernate學習筆記 merge()方法--add對象

merge

add操作


背景:
    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:

   其中,爲po設置了兩個group

輸出結果:

 

代碼B:


輸出結果:
  


結論:

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

 2. 無論merger()或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中進行回顯,則建議使用merge()方法。

參考:
    Hibernate Session.merge() javadoc
    open session in view 模式

發佈了43 篇原創文章 · 獲贊 13 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章