返回介绍

N-1 和 1-1 的检索策略

发布于 2025-01-04 01:27:29 字数 1093 浏览 0 评论 0 收藏 0

这个小节中的内容其实与第二部分的关于 1-N 和 N-N 部分有很多相似之处。只不过操作的对象不一样。比如说,我们之前考虑的是在获得了 Customer 时,如何获取其对应的 orders 集合;而在该节,我们考虑的是,在获取了 Order 对象,如何获取相对应的 Customer。

在这里,我们需要考虑的是在 Order.hbm.xml 中的标签的属性,同样,其也有 lazy 属性和 fetch 属性:

lazy 属性(默认值 proxy)fetch 属性(默认值 select)检索 Order 对象时对关联的 Customer 对象使用的检索策略
proxy未设置(取默认值 select)采用延迟检索策略
no-proxy未设置(取默认值 select)无代理延迟检索策略
false未设置(取默认值 select)立即检索
proxyjoin迫切左外连接检索

需要注意的点:

  • 若 fetch 属性设置为 join,那么 lazy 属性将被忽略;
  • 迫切左外连接检索策略的优点在于比立即检索策略使用的 SELECT 语句更少;
  • no-proxy 延迟检索需要增强持久化类的字节码才能实现。
  • Query 的 list 方法会忽略映射文件配置的迫切左外连接检索策略(join),而采用延迟检索策略。

如果在关联级别使用了延迟加载或立即加载检索策略,可以设定批量检索的大小,以帮助提高延迟检索或立即检索的运行性能。该属性需要设置在 1 那一的 class 元素中,也就是 Customer 的元素: <class name="Customer" table="CUSTOMERS" lazy="true" batch-size="5"> 。其作用可以批量的初始化 Customer 对象。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文