You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Hibernate双SessionFactory调用load()报LazyInitializationException问题

双SessionFactory场景下LazyInitializationException异常原因

该异常本质是load()方法返回的懒加载代理对象访问属性时,没有关联的可用Session。第一个SessionFactory调用正常、第二个调用出错,常见诱因如下:

  • 第二个SessionFactory未绑定对应事务管理器
    Spring声明式事务默认仅关联主SessionFactory对应的PlatformTransactionManager,多数据源场景下每个SessionFactory都需要独立配置专属的事务管理器。如果调用第二个SessionFactoryload()方法的业务逻辑,没有通过@Transactional(transactionManager = "第二个事务管理器的Bean名称")指定正确的事务管理器,方法执行时第二个SessionFactory不会生成可用的绑定Session,代理对象后续访问属性就会抛出无Session异常。
  • 第二个SessionFactory的会话生命周期配置缺失
    如果你给第一个SessionFactory配置了OpenSessionInViewFilter或OpenSessionInViewInterceptor,将Session生命周期延长到视图层渲染完成,但第二个SessionFactory没有做对应的配置,就会出现第二个SessionFactory的Session在事务提交后立即关闭,后续在事务外访问代理对象属性时找不到可用Session的问题。
  • 实体与SessionFactory的映射关系不匹配
    检查两个SessionFactory配置的实体扫描路径:如果调用load()加载的实体,只被第一个SessionFactory扫描注册过,你用第二个SessionFactory加载该实体时,生成的代理对象会和错误的Session上下文绑定,也会触发懒加载异常。
  • 全局懒加载配置不一致
    检查两个SessionFactory的hibernate.enable_lazy_load_no_trans配置项:如果第一个SessionFactory显式开启了该配置(允许事务外触发懒加载),第二个未开启,也会出现第一个调用正常、第二个抛异常的情况。该配置存在数据库连接泄漏风险,不建议生产环境开启。

内容的提问来源于stack exchange,提问作者Dimpy Aggarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:27:03