Could not obtain transaction-synchronized Session for current thread

原因

必须要将使用

sessionFactory.getCurrentSession()

获取session的代码所在的方法加入到事务管理器中;否则获取不到session

sessionFactory.getCurrentSession()是要基于事务的,才能实现session生命周期的管理

解决

1.添加事务注解
再使用了获取当前session的方法上添加
@Transactional(readOnly=true) 或 只写@Transactional

或者直接在整个service类上加入
需要在spring配置文件中开启 注解模式

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"></property> 
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

2.在原有hibernate事务管理的规则配置文件中修改,就是spring的配置文件
寻找类似

<tx:advice id="txAdvice" transaction-manager="transactionManager">

的配置项
可以在配置项中的

<tx:attributes>
	<tx:method .......>

这种中找到method后面的name配置 一般都是以某某开头的方法 会有很多,类似于
在这里插入图片描述
等等,表示某某开头的方法会被特别注意,这个时候修改你自己方法的名字使之符合这些规则,或者在规则里再开一个你的方法名开头的配置即可。
一般会有一个配套的aop配置在一起,使用切入的方式,统一加入事务的管理。

如果没有写这些配置,建议按照第一种,开启事务注解,然后使用添加注解的形式解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值