Hibernate可以充分有效的使用批量抓取(批量立即加载和批量延迟加载),也就是说,如果仅一个访问代理(或集合),那么Hibernate将不载入其他未实例化的代理。 批量抓取是延迟查询抓取的优化方案,你可以在两种批量抓取方案之间进行选择:在类级别和集合级别。
一对多、多对多(末端为多)的情况:在集合的配置中设置,以 set 为例,如下所示:
<set name="students" inverse="true" cascade="all" lazy="false" batch-size="2" ><!-- 一对多的延迟加载设置 -->
<key>
<column name="TEAMID" length="32" not-null="true" />
</key>
<one-to-many class="edu.dgut.ke.model.Student" />
</set>
一对一、多对一(末端为一)的情况:如果要对末端为一的关联设置批量加载,要在“一”这端的配置文件中进行设置,比如学生对身份证,要实现对班级的批量加载,应设置如下
<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 阅读(345)
评论(0) 编辑 收藏 所属分类:
hibernate