可以延迟加载的配置组合:
⑴关联实体的载入策略(one-to-one或many-to-one
lazy | 决定关联实体什么时候载入 (proxy|false) |
fetch | join:使用连接查询检索对象;select(默认):抓取在前面查询到的所有实体对象的关联对象 |
类级别:在调用load函数时延迟有效,get函数无效,Query.list()都无效.
默认 延迟加载.
延迟加载:
Customer.hbm.xml:
- <class name="basicCar.bean.Customer" table="customer" lazy="true">
-
- <set name="Accounts" inverse="false" cascade="delete" fetch="select" lazy="extra">
- <key column="customerId"/>
- <one-to-many class="basicCar.bean.Account"/>
- </set>
- </class>
Account.hbm.xml:
- <class name="basicCar.bean.Account" table="account" lazy="false">
-
-
-
- <many-to-one name="customer"
- column="customerId"
- class="basicCar.bean.Customer"
- cascade="save-update"
- not-null="false"
- fetch="select"
- lazy="proxy">
- </many-to-one>
- </class>
立即加载:
Customer.hbm.xml:
- <class name="basicCar.bean.Customer" table="customer" lazy="false">
-
- <set name="Accounts" inverse="false" cascade="delete" fetch="select" lazy="extra">
- <key column="customerId"/>
- <one-to-many class="basicCar.bean.Account"/>
- </set>
- </class>
Account.hbm.xml:
- <class name="basicCar.bean.Account" table="account" lazy="false">
-
-
-
- <many-to-one name="customer"
- column="customerId"
- class="basicCar.bean.Customer"
- cascade="save-update"
- not-null="false"
- fetch="select"
- lazy="false">
- </many-to-one>
- </class>
batch载入策略:
设置批量处理,可以把缓存中的代理类进行批量处理,这样可以减少数据库的访问次数.
例如在Customer.hbm.xml:
<set name="Accounts" inverse="false" cascade="delete" fetch="select" lazy="extra"batch-size="3" > <!-- 表示最多批量初始化3个accounts集合代理类 -->
<key column="customerId"/>
<one-to-many class="basicCar.bean.Account"/>
</set>