Hibernate(22):openSession的执行细节及相对优势

本文通过源码层面详细对比了Hibernate中getCurrentSession与openSession两种创建Session的方式,并总结了各自的优劣。文章指出getCurrentSession与openSession在创建Session时并无实质性的技术优势差异。

Hibernate(21):getCurrentSession还是用openSession? 中, 我们从getCurrentSession执行细节上总结了这个方法生成session的优点. 本篇中,我们还从openSession的执行来看,openSession有没有优势,优势又是什么.

    我们先从sessionFactory.openSession()一句开始入手.

    在sessionFactory.openSession()方法里, hibernate又调用了sessionFactory实现类SessionFactoryImpl中的openSession (interceptor), interceptor是个什么? 它从哪里来的? 这里边是否藏着什么玄机? 看到其类型为org.hibernate.Interceptor接口,它是在new Configuration时由interceptor = EmptyInterceptor.INSTANCE语句赋了值, 而这个EmptyInterceptor.INSTANCE也正它名字说的那样, 没做什么事. 这样, 我们得出openSession(interceptor)时的interceptor没有给即将诞生的Session带来什么优势. (BTW, 这个interceptor一般用来干啥? 又怎么来设置? 待日后做针对性实验观察)

    接着看openSession(interceptor)又调用的openSession(Connection connection,boolean autoClose,long timestamp,Interceptor sessionLocalInterceptor)方法.这个方法中参数connection为null, autoClose为false. 有一个long类型的timestamp,它是干啥的? 料它也不会对session的创建带来什么优势,不过"搂草打兔子 " 地把它也研究下. 看SessionImpl类,发现timestamp的存在仅仅是为了实现SessionImplementor接口里定义的方法 getTimestamp. 再往下追,这个getTimestamp方法在哪调用? 主要用来做什么? 有如下所示的调用:

 


上面getTimestamp的调用中timestamp大多是作为txTimestamp的,与事务有关, 待日后再专门研究,此篇中先放它一马.

    这样,一个session就创建出来了, 那跟getCurrentSession相比,有什么优势呢?答案是: 没有.
------------------
结语. 用了两个篇幅, 从源码层面上仔细对比了getCurrentSession跟openSession相比的优势,见Hibernate(21):getCurrentSession还是用openSession 中 的总结.  那么跟跟openSession相比,getCurrentSession在使用上有什么注意的呢? 到现在发现的一个就是,由于getCurrentSession方法返回的session在做事务的commit时, session可能会自动给关掉,这样若自己的代码中再调用session.close时就抛出了"Session was already closed"异常, 这也正是这一系列博客的引子.  

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值