文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
N-1 和 1-1 的检索策略
这个小节中的内容其实与第二部分的关于 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) | 立即检索 |
proxy | join | 迫切左外连接检索 |
需要注意的点:
- 若 fetch 属性设置为 join,那么 lazy 属性将被忽略;
- 迫切左外连接检索策略的优点在于比立即检索策略使用的 SELECT 语句更少;
- no-proxy 延迟检索需要增强持久化类的字节码才能实现。
- Query 的 list 方法会忽略映射文件配置的迫切左外连接检索策略(join),而采用延迟检索策略。
如果在关联级别使用了延迟加载或立即加载检索策略,可以设定批量检索的大小,以帮助提高延迟检索或立即检索的运行性能。该属性需要设置在 1 那一的 class 元素中,也就是 Customer 的元素: <class name="Customer" table="CUSTOMERS" lazy="true" batch-size="5">
。其作用可以批量的初始化 Customer 对象。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论