Hibernate呼叫Session的一点个人猜测

本文深入探讨了Hibernate中SessionFactory与Session的管理机制,解释了跨库操作导致的死锁问题,并提供了两种解决方案:将不同数据库的SessionFactory统一管理,或显式绑定SessionFactory以避免死锁。

     SessionFactorySession现在感觉是Hibernate的精髓,却也容易误解.今天通过跨库出现错误感觉通了一点------Hibernate呼叫Session的顺序(当然有点猜测的味道)

     1)产生Session:一般的的当Dao被显示的使用时,由于Spring的管理他会调用getCurrentSession()来获得当前Session.

注释:这里感觉是一切罪恶的源头,如果你的DAO使用了hibernateTemplate的话在,在Spring配置中尼就会发现(至少我的项目是这样的):
<bean id="houseInfoDao" class="com.dgsoft.data.biz.info.dao.house.HouseDaoImpl">
      <property name="hibernateTemplate">
           <ref bean="hibernateTemplateInfo" />   //
注意这里的Info
     </property>
</bean>

<bean id="hibernateTemplateInfo" class="org.springframework.orm.hibernate3.HibernateTemplate">

       <property name="sessionFactory">

           <ref bean="sessionFactoryInfo" />//这个不用说就是Info所对应库sessionFactory

       </property>

       <property name="jdbcExceptionTranslator">//看命名是针对Jdbc异常

           <ref bean="jdbcExceptionTranslatorInfo" />

       </property>

</bean>

也就是说对于getCurrentSession()方法来说,他会先调用该Dao所属的SessionFactory看看里面有没有存在Session.这引出了第二步

 

2)查询该DAO所属的SessionFactory,查看里面是否有Session,有则返回该Session而没有则建立返回.显然的当不同的Dao显示调用时,能由于他们属于不同的库就会生成不同Session(SessionFactory不同就不可能生成相同的Session).这里可以简单的认为Session是这个库专有的,当你显示调用Dao是就会生成该库的专有session毕竟session也是connect的拥有者

 

3)由于显示调用Dao并且肯定对库进行操作因而会绑定事物,也就是说会死锁该库的部分数据,但是由于库与库之间有关系(主要是表与表的关联)其他库的专有Session可以通过这个关联操作该库数据(注意为什么说Session是库专有的是由于Session当访问其他库时必须通过关联若没有关联则无法访问这是有限制的。不过当他对对方库进行操作也会在对方库中添加事物------JTA产生的原因


 

这就是问题所在。当我有个Service中有两个Dao而他们不属于同一个库。而一个DaoA改变该库中的一个表A而另一个DaoB通过关联对表A进行操作,显然两个Session两个不同的事物,而不幸的是他们操作的是表A的同一条记录(事物最小级别好像就是”),因而你会很容易的发现出现了死锁.

解决方法:

         1)将两个库变为一个SessionFactory进行管理,由于只出来一个Session就不会出现两个事物之间死锁的问题!

         2)在查阅hibernateTemplate的信息时无意发现了一个方法public final void setSessionFactory(SessionFactory sessionFactory),也就是说对于DAO我们可以显示的绑定到指定的SessionFactory,这样如果临时的将DaoASessionFactory设成DaoB对应的,应该也能解决死锁问题.(就是不知道代价如何)

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值