hibernate持久層操作

          Session.get/load的區別:
                1.如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個ObejctNotFoundException。
                2.Load方法可返回實體的代理類類型,而get方法永遠直接返回實體類。
                3.Load方法可以充分利用內部緩存和二級緩存中現有數據,而get方法則僅僅在內部緩存中進行數據查找,如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取。

           

           



                Session.find/iterate的區別:
                find方法將執行Select SQL從數據庫中獲得所有符合條件的記錄并構造相應的實體對象,實體對象構建完畢之后,就將其納入緩存。它對緩存只寫不讀,因此無法利用緩存。
                iterate方法首先執行一條Select SQL以獲得所有符合查詢條件的數據id,隨即,iterate方法首先在本地緩存中根據id查找對應的實體對象是否存在,如果緩存中已經存在對應的數據,則直接以此數據對象作為查詢結果,如果沒有找到,再執行相應的Select語句獲得對應的庫表記錄(iterate方法如果執行了數據庫讀取操作并構建了完整的數據對象,也會將其查詢結果納入緩存)。

           

           



                Query Cache產生作用的情況:
                1.完全相同的Select SQL重復執行。
                2.在兩次查詢之間,此Select SQL對應的庫表沒有發生過改變。

           

           



                Session.save方法的執行步驟:
                1.在Session內部緩存中尋找待保存對象。內部緩存命中,則認為此數據已經保存(執行過insert操作),實體對象已經處于Persistent狀態,直接返回。
                2.如果實體類實現了lifecycle接口,則調用待保存對象的onSave方法。
                3.如果實體類實現了validatable接口,則調用其validate()方法。
                4.調用對應攔截器的Interceptor.onSave方法(如果有的話)。
                5.構造Insert SQL,并加以執行。
                6.記錄插入成功,user.id屬性被設定為insert操作返回的新記錄id值。
                7.將user對象放入內部緩存。
                8.最后,如果存在級聯關系,對級聯關系進行遞歸處理。

           

           



                Session.update方法的執行步驟:
                1.根據待更新實體對象的Key,在當前session的內部緩存中進行查找,如果發現,則認為當前實體對象已經處于Persistent狀態,返回。
                2.初始化實體對象的狀態信息(作為之后臟數據檢查的依據),并將其納入內部緩存。注意這里Session.update方法本身并沒有發送Update SQL完成數據更新操作,Update SQL將在之后的Session.flush方法中執行(Transaction.commit在真正提交數據庫事務之前會調用Session.flush)。

           

           


           

                Session.saveOrUpdate方法的執行步驟:
                1.首先在Session內部緩存中進行查找,如果發現則直接返回。
                2.執行實體類對應的Interceptor.isUnsaved方法(如果有的話),判斷對象是否為未保存狀態。
                3.根據unsaved-value判斷對象是否處于未保存狀態。
                4.如果對象未保存(Transient狀態),則調用save方法保存對象。
                5.如果對象為已保存(Detached狀態),調用update方法將對象與Session重新關聯。

          posted on 2009-03-26 00:09 MichaelLee 閱讀(177) 評論(0)  編輯  收藏 所屬分類: Hibernate

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          公告

          ====Michael Lee====
          =Java Sofware Engineer=
          =Work @ Beijing=
          ---再煩,也別忘微笑;再急,也要注意語氣;再苦,也別忘堅持;再累,也要愛自己!---
          ---低調做人,你會一次比一次穩健;高調做事,你會一次比一次優秀---
          ---成功的時候不要忘記過去;失敗的時候不要忘記還有未來---

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 田林县| 高要市| 张家港市| 泽库县| 油尖旺区| 商城县| 巫溪县| 马鞍山市| 西安市| 萝北县| 田阳县| 龙里县| 汽车| 马鞍山市| 枣阳市| 安福县| 宣城市| 安平县| 彩票| 拜泉县| 开鲁县| 萝北县| 酒泉市| 平南县| 马龙县| 平和县| 滦南县| 都匀市| 磐石市| 新巴尔虎左旗| 登封市| 建阳市| 武山县| 孝感市| 康保县| 巴彦县| 剑阁县| 高邑县| 邵武市| 湖口县| 思茅市|