一、延迟加载核心概念
1.1 基本定义
延迟加载(Lazy Loading)是Hibernate的一种性能优化策略,它推迟对象关联数据的加载时机,只有在真正访问这些关联数据时才会从数据库加载。这种机制有效减少了不必要的数据库查询,显著提升了应用性能。
1.2 工作原理图示
[业务代码] → 访问主对象 → [Hibernate] → 返回主对象代理
↓
访问关联属性
↓
[Hibernate] → 触发SQL查询 → [数据库] → 加载真实数据
二、延迟加载的实现方式
2.1 代理模式实现
Hibernate通过动态生成实体类的子类代理来实现延迟加载:
@Entity
public class Order {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Customer customer; // 实际是Customer$HibernateProxy实例
}
代理对象特性:
初始只包含主键值
首次访问非id属性时触发加载
继承自原始实体类
2.2 字节码增强
通过字节码增强技术修改实体类:
@Entity
public class Product {
@OneToMany(mappedBy = "product")
private List
}
集合包装为特殊实现类
拦截集合访问操作
按需加载数据
三、配置延迟加载
3.1 注解配置方式
// 单个关联的延迟加载
@ManyToOne(fetch = FetchType.LAZY)
private Department department;
// 集合关联的延迟加载(默认就是LAZY)
@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY)
private Set
// 基本属性的延迟加载(需要字节码增强)
@Basic(fetch = FetchType.LAZY)
@Lob
private String resumeText;
3.2 XML映射配置