Hibernate可以充分有效的使用批量抓取(批量立即加載和批量延遲加載),也就是說,如果僅一個訪問代理(或集合),那么Hibernate將不載入其他未實例化的代理。 批量抓取是延遲查詢抓取的優(yōu)化方案,你可以在兩種批量抓取方案之間進行選擇:在類級別和集合級別。
一對多、多對多(末端為多)的情況:在集合的配置中設(shè)置,以 set 為例,如下所示:
<set name="students" inverse="true" cascade="all" lazy="false" batch-size="2" ><!-- 一對多的延遲加載設(shè)置 -->
<key>
<column name="TEAMID" length="32" not-null="true" />
</key>
<one-to-many class="edu.dgut.ke.model.Student" />
</set>
一對一、多對一(末端為一)的情況:如果要對末端為一的關(guān)聯(lián)設(shè)置批量加載,要在“一”這端的配置文件中進行設(shè)置,比如學(xué)生對身份證,要實現(xiàn)對班級的批量加載,應(yīng)設(shè)置如下
<class name="edu.dgut.ke.model.Certificate" table="CERTIFICATE" lazy="true" batch-size="10" >
測試例子
Session session = HibernateSessionFactory.getSession();
List list = session.createQuery("from Student").list();
HibernateSessionFactory.closeSession();
(Student對Certificate是采用立即加載策略)
控制臺輸出
Hibernate: select student0_.ID as ID0_, student0_.cardId as cardId0_, student0_.TEAMID as TEAMID0_, student0_.STUDENTNAME as STUDENTN4_0_ from STUDENT student0_
Hibernate: select certificat0_.ID as ID1_0_, certificat0_.`DESCRIBE` as DESCRIBE2_1_0_ from CERTIFICATE certificat0_ where certificat0_.ID
in (?, ?, ?, ?, ?, ?)
posted on 2007-11-06 16:19
Ke 閱讀(350)
評論(0) 編輯 收藏 所屬分類:
hibernate