Hibernate集合類型的延遲加載特性
本文向大家介紹Hibernate集合類型,可能好多人還不了解Hibernate集合類型,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作。在Hibernate中提供了對實體對象的延遲加載以及對集合的延遲加載,另外在Hibernate3中還提供了對屬性的延遲加載。下面我們就分別介紹這些種類的延遲加載的細節。
Hibernate集合類型的延遲加載
在Hibernate的延遲加載機制中,針對集合類型的應用,意義是最為重大的,因為這有可能使性能得到大幅度的提高,為此Hibernate進行了大量的努力,其中包括對JDK Collection的獨立實現,我們在一對多關聯中,定義的用來容納關聯對象的Set集合,并不是java.util.Set類型或其子類型,而是net.sf.hibernate.collection.Set類型,通過使用自定義集合類的實現,Hibernate實現了集合類型的延遲加載。為了對Hibernate集合類型使用延遲加載,我們必須如下配置我們的實體類的關于關聯的部分:
- <hibernate-mapping>
- <class name=”com.neusoft.entity.User” table=”user”>
- …
- <set name=”addresses” table=”address” lazy=”true” inverse=”true”>
- <key column=”user_id”/>
- <one-to-many class=”com.neusoft.entity.Arrderss”/>
- </set>
- </class>
- </hibernate-mapping>
通過將<set>元素的lazy屬性設置為true來開啟Hibernate集合類型的延遲加載特性。我們看下面的代碼:
- User user=(User)session.load(User.class,”1”);
- Collection addset=user.getAddresses();
- Iterator it=addset.iterator();
- while(it.hasNext()){
- Address address=(Address)it.next();
- System.out.println(address.getAddress());
- }
當程序執行到第二行時,這時并不會發起對關聯數據的查詢來加載關聯數據,只有運行到第三行時,真正的數據讀取操作才會開始,這時Hibernate會根據緩存中符合條件的數據索引,來查找符合條件的實體對象。
【編輯推薦】