wiflish
          Loving Life! Loving Coding!
          posts - 98,comments - 98,trackbacks - 0
          Hibernate數據加載方式:
          1、即時加載(Immediate Loading)
          ?? 當實體加載完成后,立即加載與實體相關聯的數據。即當實體加載完成后,Hibernate自動立即讀取與實體相關聯的數據,并且填充到實體對應的屬性中。這種加載通常有多條select語句,即select實體數據后,同時select實體相關聯的數據。

          2、延遲加載(Lazy Loading)
          ?? 實體加載時,其關聯數據并不是立即讀取,而是當關聯數據第一次被訪問時再進行讀取,這種加載方式在第一次訪問關聯數據時,必須在同一個session中,否則會報session已關閉錯誤。
          ?? 延遲加載通過在實體的hbm文件中的對應屬性中設定lazy="true"實現。Hibernate3默認的加載方式是延遲加載。即默認lazy="true",主要用于one-to-many場合。

          3、預先加載(Eager Loading)
          ?? 預先加載時,實體及關聯對象同時讀取,與即時加載類似,但是預先加載是使用"outer-join"通過一條select語句同時讀取。
          ?? 注意:當實體間關聯比較復雜時,比如多層關聯,Hibernate生成的"outer join SQL"可能過于復雜,此時可以通過設定全局變量(hibernate.max_fetch_depth)限定join的層次(一般設定為5層)。

          4、批量加載(Batch Loading)
          ?? 對于即時和延遲加載,可以采用批量加載進行優化。
          ?? 批量加載就是通過批量提交多個限定條件,一次多個限定條件的數據讀取。同時在實體映射文件中的class節點,通過配置"batch-size"參數打開批量加載機制,并限定每次批量加載數據的數量,一般來說該值<10較合理.
          ?
          比如:???
          select?*?from test?where?id=1;
          select?
          *?from test?where?id=2;
          ? 我們可以整合成一條語句:
          select?*?from?test?where?id=1?ro?id=2;
          ? 這就是所謂的批量加載機制。


          posted on 2006-08-03 17:25 想飛的魚 閱讀(669) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 元江| 山阴县| 阳东县| 沐川县| 师宗县| 河池市| 乌鲁木齐县| 扬中市| 饶平县| 乃东县| 舒兰市| 潼南县| 册亨县| 金山区| 栾川县| 阿图什市| 鲁甸县| 河津市| 拜泉县| 富锦市| 永泰县| 将乐县| 额尔古纳市| 涟水县| 扎兰屯市| 类乌齐县| 万盛区| 肥城市| 青冈县| 万宁市| 阿瓦提县| 双辽市| 常宁市| 潮安县| 同心县| 明水县| 内乡县| 临邑县| 威海市| 沂水县| 孟州市|