這個問題出如今整合springmvc+spring4+hibernate5的時候出現的。首先事務要配好,我是這樣配置的:html
<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven transaction-manager="txManager"/> //以後在合適的位置添加註解(通常在實現類或方法上):@Transactional //添加事務也能夠解決這個異常:Could not obtain transaction-synchronized Session for current thread
可是設置了以後事務好像沒生效,在查看spring官方文檔中說了這麼一句:
就說若是你在springmvc中配置了<tx:annotation-driven/>
,那麼spring中的
<tx:annotation-driven transaction-manager="txManager"/>
就失效了,他不會掃描除了controller之外的包中的有@Transactional
註解的地方。java
因此解決方法就是分段掃描:spring
SpringMVC.xml配置文件--> 只掃描controller組件 注意使用 use-default-filters="false" <context:component-scan base-package="com.yx.*" use-default-filters="false" > <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan> ApplicationContext.xml配置文件-->掃描除controller外的全部組件 <context:component-scan base-package="com.yx.*" > <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan>
上面方法是:這位仁兄 提供的。express
在此以前我看過其餘解決方法,如:
@Transactional
所導的包是:org.springframework.transaction.annotation.Transactional
session
更多解決方法看下面:mvc