Chapter 20. Improving performance

1.抓取策略
抓取策略声明在O/R映射的元数据中,或在在特定的HQL 或条件查询中重载声明。

Join fetching:用out join同时查询出关联的对象或集合

Select fetching: 另外发送一条 SELECT 语句抓取当前对象的关联实体或集合。除非你显式的指定lazy="false"禁止 延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条select语句。

Subselect fetching:另外发送一条SELECT 语句抓取在前面查询到的所有实体对象的关联集合。除非你显式的指定lazy="false" 禁止延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条select语句。

Batch fetching:优化的抓取策略,通过一组(list)主键或外键,一次查询出一批实例。
batch-size属性,可以批量加载实体类,参见:Classes.hbm.xml
<class name="Classes" table="t_classes" batch-size="3">

从另一个角度来看,hibernate的fetching 分成以下几种。

•Immediate fetching: 如果实体已经被加载了,他的关联对象,关联集合,属性也要及时加栽。
•lazy collection fetching: 只有应用程序真正使用这个集合的时候,才加栽这个集合。
•"Extra-lazy" collection fetching : hibernate 不加载一个集合的所有对象到内存里,需要哪个个体,加载哪个。
•Proxy fetching :当前对象的单值相关对象只有在调用它的主键外的其他属性的get方法时才加载它。
"NO-proxy"fetching :当前对象的单值相关对象在它的实体变量被访问的时候就被加载。相对于Proxy fetching来说,"No-proxy" Proxy fetching更延迟。(因为"NO-proxy"fetching即使是访问关联对象的主健,关联对象都要被加载)。"NO-proxy"fetching对于应用来说更条理清晰。因为在应用中没有一个可见的proxy.
      个人认为可以这样理解上述情况,假如在数据库中存在两张表 A,B.表A中有一个指向表B主健的外键。如果想知道A表中的某条数据对应B表中的那条记录的主键。完全不用访问B表,A表中的此条数据的外键值就是B表中对应数据的主键。所有只有访问B表中对应数据的主键外其他属性时,才需要加载B表中的这条数据。

•Lazy attribute fetching :当前对象的某个属性或单值相关对象只有在与它对应的实体变量被访问的时候才加载。


你可能感兴趣的:(Hibernate,xml,performance)