hibernate检索策略
Hibernate 检索策略详解:从立即加载到连接查询的优化实践
Hibernate 的检索策略(Retrieval Strategy)决定了对象及其关联数据的加载时机和方式,直接影响数据库交互效率。合理的检索策略能减少不必要的 SQL 执行,避免 “N+1 查询” 等性能问题。本文系统解析 Hibernate 的三种核心检索策略(立即检索、延迟检索、迫切左外连接检索),结合类级别与关联级别的配置差异,详解其实现机制、适用场景及最佳实践。
检索策略的核心目标与分类
核心目标
- 减少数据库访问次数:避免频繁执行 SQL 导致的性能损耗;
- 按需加载数据:仅加载应用程序实际需要的对象及关联数据,避免 “加载过多”;
- 平衡内存与性能:延迟加载减少内存占用,连接查询减少 SQL 次数,需根据业务场景权衡。
分类
Hibernate 检索策略按作用范围分为两类:
- 类级别检索策略:控制单个实体对象的加载时机(如
load(User.class, 1L)何时执行 SQL); - 关联级别检索策略:控制关联对象的加载时机(如加载
Customer时,其关联的Order集合何时加载)。
类级别的检索策略
类级别仅支持两种检索策略:立即检索和延迟检索,通过 <class> 元素的 lazy 属性配置(默认 lazy="true",即延迟检索)。
1. 立即检索(lazy="false")
行为特征
调用 load() 或 get() 方法时,立即执行 SQL 从数据库加载对象的所有属性(除关联对象外),返回真实对象(非代理)。