直接回答:懒加载指访问关联对象时才发 SQL,而非加载主实体时一次取回。实现上多用动态代理或字节码增强(如 Hibernate 的 Proxy)包装实体子类,拦截 getter 首次调用触发查询。

展开解析:典型陷阱:

  • N+1 问题:遍历列表时每个实体触发一次关联查询。
  • LazyInitializationException:session/事务关闭后才访问关联属性,常见于序列化时。
  • 隐式性能抖动:看似无害的 getter 背后是一次数据库往返。

缓解:JOIN FETCH / EntityGraph 按需急加载;DTO 投影只取所需字段;事务边界内完成装配;生产开 SQL 日志监控查询次数。

@Query("SELECT o FROM Order o JOIN FETCH o.items")
List<Order> findAllWithItems();

追问方向:open-session-in-view 的利弊、如何检测 N+1。