Hibernate集合類型的延遲加載特性
本文向大家介紹Hibernate集合類型,可能好多人還不了解Hibernate集合類型,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數(shù)據(jù)的時候,才真正執(zhí)行數(shù)據(jù)加載操作。在Hibernate中提供了對實體對象的延遲加載以及對集合的延遲加載,另外在Hibernate3中還提供了對屬性的延遲加載。下面我們就分別介紹這些種類的延遲加載的細節(jié)。
Hibernate集合類型的延遲加載
在Hibernate的延遲加載機制中,針對集合類型的應(yīng)用,意義是最為重大的,因為這有可能使性能得到大幅度的提高,為此Hibernate進行了大量的努力,其中包括對JDK Collection的獨立實現(xiàn),我們在一對多關(guān)聯(lián)中,定義的用來容納關(guān)聯(lián)對象的Set集合,并不是java.util.Set類型或其子類型,而是net.sf.hibernate.collection.Set類型,通過使用自定義集合類的實現(xiàn),Hibernate實現(xiàn)了集合類型的延遲加載。為了對Hibernate集合類型使用延遲加載,我們必須如下配置我們的實體類的關(guān)于關(guān)聯(lián)的部分:
- <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屬性設(shè)置為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());
- }
當程序執(zhí)行到第二行時,這時并不會發(fā)起對關(guān)聯(lián)數(shù)據(jù)的查詢來加載關(guān)聯(lián)數(shù)據(jù),只有運行到第三行時,真正的數(shù)據(jù)讀取操作才會開始,這時Hibernate會根據(jù)緩存中符合條件的數(shù)據(jù)索引,來查找符合條件的實體對象。
【編輯推薦】