Hibernate 没有绑定到线程的休眠会话
我正在使用Struts+Hibernate+Spring进行项目开发。 这是我的Spring上下文XML文件。当我在userDao.getXXXX方法的开头调用“sessionFactory.getCurrentSession()”时,抛出了一个异常,其详细信息是“没有绑定到线程的Hibernate会话,并且配置不允许在此创建非事务会话”Hibernate 没有绑定到线程的休眠会话,hibernate,spring,struts,transactions,Hibernate,Spring,Struts,Transactions,我正在使用Struts+Hibernate+Spring进行项目开发。 这是我的Spring上下文XML文件。当我在userDao.getXXXX方法的开头调用“sessionFactory.getCurrentSession()”时,抛出了一个异常,其详细信息是“没有绑定到线程的Hibernate会话,并且配置不允许在此创建非事务会话” <!-- Hibernate Configuration --> <bean id="sessionFactory" class="
<!-- Hibernate Configuration -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- Spring Transaction Manager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- Spring Transaction Descriptions -->
<bean id="transactionAttributeSource"
class="org.springframework.transaction.interceptor.MethodMapTransactionAttributeSource">
<property name="methodMap">
<map>
<entry key="com.miaozhen.monitor.service.LoginServiceImpl.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
</map>
</property>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref bean="transactionAttributeSource"/>
</property>
</bean>
<bean id="transactionAdvisor"
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<constructor-arg>
<ref bean="transactionInterceptor"/>
</constructor-arg>
</bean>
<bean id="autoproxy"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
</bean>
<!-- DAO -->
<bean id="userDao"
class="com.miaozhen.dbservice.hibernate.dao.AUserDAO">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- Service Layer -->
<bean id="loginService"
class="com.miaozhen.monitor.service.LoginServiceImpl">
<property name="userDao">
<ref bean="userDao"/>
</property>
</bean>
<!-- Struts Actions for DelegatingActionProxy -->
<bean name="/login"
class="com.miaozhen.monitor.struts.action.LoginAction">
<property name="loginService">
<ref bean="loginService"/>
</property>
</bean>
类路径:hibernate.cfg.xml
需要进行传播
这是一个相当复杂的配置,但我怀疑登录服务
bean不知何故没有被transactionAdvisor
代理,尽管我可以看出您正试图这么做
尝试确保注入控制器的loginService
实际上是生成的代理对象,而不是原始LoginServiceImpl
对象。调试器在确保代码执行通过TransactionInterceptor
时也非常有用
你这样做有什么原因吗?有更简单的方法来实现同样的事情,不需要创建顾问、自动代理工厂、事务属性源等等。例如,使用
和@Transactional
可以简化这些工作。可能是因为您当前的方法意味着您不应该在代码中引用Spring,这对您有吸引力吗