Hibernate Fetch 抓取策略

来源:互联网 发布:交易网站源码 编辑:程序博客网 时间:2024/05/20 21:23

Fetch策略用于定义 get/load一个对象时,如何获取即时加载的对象/集合。  这些参数在Query中无效。

查询抓取(默认的)在N+1查询的情况下是极其脆弱的,因此我们可能会要求在映射文档中定义使用连接抓取:

<set name="permissions"  fetch="join">
    <key column="userId"/>
    <one-to-many class="Permission"/>
</set>

<many-to-one name="mother" class="Cat" fetch="join"/>


在映射文档中定义的抓取策略将会有产生以下影响:
通过get()或load()方法取得数据。

只有在关联之间进行导航时,才会隐式的取得数据(延迟抓取)。


在映射文档中显式的声明 连接抓取做为抓取策略并不会影响到随后的HQL查询。

通常情况下,我们并不使用映射文档进行抓取策略的定制。更多的是,保持其默认值,然后在特定的事务中, 使用HQL的左连接抓取(left join fetch) 对其进行重载。这将通知 Hibernate在第一次查询中使用外部关联(outer join),直接得到其关联数据。 在条件查询 API中,应该调用 setFetchMode(FetchMode.JOIN)语句。


原创粉丝点击