标签:style io color 使用 sp strong 文件 数据 div
实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置batch-size,hibernate将会减少SQL语句的数量。
Hibernate可以充分有效的使用批量抓取,也就是说,如果仅一个访问代理(或集合),那么hibernate将不载入其他未实例化代理。批量抓取是延迟查询抓取的优化方案,你可以在两种批量抓取方案之间进行选择:在类级别和集合级别。
类/实体级别的批量抓取很容易理解,假设你在运行时将需要面对下面的问题:你在一个Session中载入了25个Cat实例,每个Cat实例都拥有一个引用成员owner,其指向Persion,而Persion类是代理,同时lazy=true,如果你必须遍历整修cats集合,对每个元素调用getOwner()方法,hibernate将会默认的执行25次SELECT查询,得到其ower的代理对象。这时你可以通过在映射文件的Person属性,显式声明batch-size,改变其行为:
<class name=”Person” batch-size=”10”>...</class>随之,hibernate将只需要执行三次查询,分别是10,10,5.
抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明。
Hibernate3 定义了如下几种抓取策略:
Hibernate会区分下列各种情况:
这里有两个正交的概念:关联何时被抓取,以及被如何抓取(会采用什么样的SQL语句)。不要混淆它们!我们使用抓取来改善性能。我们使用延迟来定义一些契约,对某特定类的某个脱管的实例,知道有哪些数据是可以使用的。
hibernate抓取策略(单端代理的批量抓取) 保持默认,同fetch="select",如: <many-to-one name="classes" column="classesid" fetch="select"/> fetch="select",另外发送一条select语句抓取当前对象关联实体或集合 |
设置fetch="join",如: <many-to-one name="classes" column="classesid" fetch="join"/> fetch="join",hibernate会通过select语句使用外连接来加载其关联实体或集合 此时lazy会失效 |
hibernate抓取策略(集合代理的批量抓取) 保持默认,同fetch="select",如: <set name="students" inverse="true" cascade="all" fetch="select"> fetch="select",另外发送一条select语句抓取当前对象关联实体或集合 |
hibernate抓取策略(集合代理的批量抓取) 设置fetch="join",如: <set name="students" inverse="true" cascade="all" fetch="join"> fetch="join",hibernate会通过select语句使用外连接来加载其关联实体或集合 此时lazy会失效 |
hibernate抓取策略(集合代理的批量抓取) 设置fetch="subselect",如: <set name="students" inverse="true" cascade="all" fetch="subselect"> fetch="subselect",另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合 |
hibernate抓取策略,,batch-szie在<class>上的应用 batch-size属性,可以批量加载实体类,参见:Classes.hbm.xml <class name="Classes" table="t_classes" batch-size="3"> |
hibernate抓取策略,batch-szie在集合上的应用 batch-size属性,可以批量加载实体类,参见:Classes.hbm.xml <set name="students" inverse="true" cascade="all" batch-size="5"> |
标签:style io color 使用 sp strong 文件 数据 div
原文地址:http://www.cnblogs.com/crazylqy/p/4081459.html