Hibernate抓取策略

Hibernate抓取策略2009-04-25 21:44抓取策略(fetching strategy) 是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明。

Hibernate3 定义了如下几种抓取策略:

    * 连接抓取(Join fetching) - Hibernate通过 在SELECT语句使用OUTER JOIN(外连接)来 获得对象的关联实例或者关联集合。
    *查询抓取(Select fetching) - 另外发送一条 SELECT 语句抓取当前对象的关联实体或集合。除非你显式的指定lazy="false"禁止 延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条select语句。
    *子查询抓取(Subselect fetching) - 另外发送一条SELECT 语句抓取在前面查询到(或者抓取到)的所有实体对象的关联集合。除非你显式的指定lazy="false" 禁止延迟抓取(lazy fetching),否则只有当你真正访问关联关系的时候,才会执行第二条select语句。
    *批量抓取(Batch fetching) - 对查询抓取的优化方案, 通过指定一个主键或外键列表,Hibernate使用单条SELECT语句获取一批对象实例或集合。

批量抓取:
(1)在Hibernate中,对于关联抓取,可以定义每次抓取数据的数量,批量地将数据载入内存,减少与数据库交互的次数。在应用程序中可以定义车间默认的关联抓取数量。在
<hibernate-configuration>
    <session-factory>
         <property name-"default_batch_fetch_size">2</property>
    </session-factory>
</hibernate-configuration>

(2)在映射定义文件中,可能在元素class中使用属性batch-size为持久化类指定批量抓取的数量。同样,如果要在集合中使用指定的批量,可以在集合元素set(list、bag等)中使用属性batch-size指定。如果同进采用了默认的批量抓取配置,又为持久化类或集合配置了特定的抓取数量,则类或集合的特定配置将覆盖配置文件中的默认批量抓取属性。
<hibernate-mapping package="com">
    <class name="Classes">
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="name"/>
        <set name="students" inverse="true" batch-size="3">
            <key column="classesid"/>
            <one-to-many class="Student"/>
        </set>
    </class>
</hibernate-mapping>

你可能感兴趣的:(Hibernate)