Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 没有绑定到线程的休眠会话_Hibernate_Spring_Struts_Transactions - Fatal编程技术网

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="

我正在使用Struts+Hibernate+Spring进行项目开发。 这是我的Spring上下文XML文件。当我在userDao.getXXXX方法的开头调用“sessionFactory.getCurrentSession()”时,抛出了一个异常,其详细信息是“没有绑定到线程的Hibernate会话,并且配置不允许在此创建非事务会话”

<!-- 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,这对您有吸引力吗