Hibernate
提供了以下几种抓取策略:
连接抓取(Join fetching) | Hibernate通过在SELECT语句中使用OUTER JOIN来获得对象的关联实体或集合 是通过一条连接查询来取得关联属性(外键的name之类的),一条SQL语句left join,如果是延迟加载而且没有实际访问的话,也是不会查询的 |
查询抓取(Select fetching) | 另外发送一条SELECT语句抓取当前对象的关联实体或集合。除非指定了lazy=“false”禁止延迟抓取,否则只有当真正访问关联关系的时候,才会执行第二条SELECT语句 这种事会查2次的,第一次查实体对象,第二次查关联对象(受到是否延迟加载的影响) |
子查询抓取(Subselect fetching) | 另外发送一条SELECT语句抓取在前面查询到的所有实体对象的关联集合。除非指定了lazy=“false”禁止延迟抓取,否则只有当真正访问关联关系的时候,才会执行第二条SELECT语句 |
批量抓取(Batch fetching) | 对查询抓取的优化方案,通过指定一个主键或外键列表,Hibernate使用单条SELECT语句获取一批对象实体或集合 一般用在集合属性和关联主表配置上面,通过in查询来一次查出多条(batch-size)数据,比如从表实体类中引用主表集合(10个主键),batch-size=3,一共有要查询4次 |