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

Spring 5.3中已移除的HibernateDaoSupport.getSession()是否有替代方案?

Spring 5.3 替代 HibernateDaoSupport.getSession() 的可行方案

首先明确:Spring 5.x 版本的 org.springframework.orm.hibernate5.support.HibernateDaoSupport 确实移除了 getSession() 方法,你并没有遗漏相关内容。针对你的升级需求,有两种低侵入性的替代方案:

1. 自定义基础DAO类模拟旧逻辑

你可以封装一个自定义的基础DAO,复刻旧 getSession() 的会话管理行为,避免大规模修改现有代码:

  • 注入 SessionFactory 到自定义基础DAO中
  • 实现 getSession() 方法,结合 Spring 的 TransactionSynchronizationManager 跟踪会话,确保事务结束时自动释放未绑定的会话
    示例代码:
public abstract class CustomHibernateDaoSupport {
    @Autowired
    private SessionFactory sessionFactory;

    protected Session getSession() {
        // 如果当前存在事务绑定的会话,直接返回
        if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
            return sessionFactory.getCurrentSession();
        }
        // 打开新会话并绑定到当前线程
        Session session = sessionFactory.openSession();
        TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
        return session;
    }

    // 统一释放会话(可结合AOP在方法执行完成后调用)
    protected void releaseSession(Session session) {
        SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);
        if (sessionHolder != null && !sessionHolder.isSynchronizedWithTransaction()) {
            session.close();
        }
    }
}

让现有DAO继承这个自定义类,调用 getSession() 的方式和旧代码完全一致,同时通过AOP统一处理会话释放,避免每个方法手动调用。

2. 配置 Hibernate 适配 getCurrentSession()

无需自定义类,通过配置让 getSessionFactory().getCurrentSession() 实现类似旧方法的会话管理:

  • 在 Hibernate 配置文件中设置:hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
  • 直接在DAO中调用 getSessionFactory().getCurrentSession(),此时 Spring 会自动管理会话的生命周期,无需手动关闭
  • 注意:只读操作无需添加 @Transactional,涉及写操作的方法仍需添加事务注解,但可以通过类级别 @Transactional 减少重复标注

方案选择建议

  • 若希望完全复刻旧代码逻辑、最小化改动,优先选择第一种自定义基础DAO的方案
  • 若希望贴合 Spring 5.x 的设计规范、长期维护更简便,优先选择第二种配置适配方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:25:18