知识卡片

加载类型EAGER与LAZY的权衡

专业/工作 · 621.d

内容

表间关联的加载时机分两种:EAGER在查询主实体时立即用JOIN把关联实体一并取出,一次查询拿到完整数据,但即使用不到关联数据也要付出额外查询开销;LAZY默认按需加载,只有真正访问到关联属性时才触发SQL查询,平时查询更轻量,但如果在没有活跃数据库会话的上下文里访问关联属性,会因为无法按需查询而报错(延迟加载失败),如果在循环里频繁触发,又容易演变成大量小查询堆积的性能问题。发散:这是”预先算好一切”和”用到再算”两种通用策略在ORM关联加载上的具体体现,和缓存预热/懒加载、静态分析/延迟解析是同一类权衡——提前付出确定的成本,还是把不确定的成本推迟到真正需要的那一刻。

参考来源

《Spring Boot应用开发实战》第4章《数据库与持久化技术》