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
Java Hibernate会话未绑定到使用AOP切入点事务管理器的线程_Java_Spring_Hibernate_Transactions - Fatal编程技术网

Java Hibernate会话未绑定到使用AOP切入点事务管理器的线程

Java Hibernate会话未绑定到使用AOP切入点事务管理器的线程,java,spring,hibernate,transactions,Java,Spring,Hibernate,Transactions,我正在使用Spring4.0.3和Hibernate3.6.10。我对Spring和Hibernate很有经验,但是我从零开始了一个新项目 谷歌搜索了我的错误,发现了大约六个错误,我认为它们都没有帮助 以下是我的spring配置文件中的相关定义: <!-- the transactional advice (what happens; see the <aop:advisor/> bean below) --> <tx:advice id="txAdvice" tr

我正在使用Spring4.0.3和Hibernate3.6.10。我对Spring和Hibernate很有经验,但是我从零开始了一个新项目

谷歌搜索了我的错误,发现了大约六个错误,我认为它们都没有帮助

以下是我的spring配置文件中的相关定义:

<!-- the transactional advice (what happens; see the <aop:advisor/> bean below) -->
<tx:advice id="txAdvice" transaction-manager="txManager">
    <!-- the transactional semantics... -->
    <tx:attributes>
        <!-- all methods starting with get are read-only -->
        <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
        <!-- other methods use the default transaction settings (see below) -->
        <tx:method name="" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

<!-- ensure that the above transactional advice runs for any execution
    of an operation defined by the FooService interface -->
<aop:config>
    <aop:pointcut id="loaderOperation" expression="execution(* com.corrisoft.air.testload.loader.*.load(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="loaderOperation"/>
</aop:config>

<!-- similarly, don't forget the PlatformTransactionManager -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="airDatabase"/>
</bean>

<util:list id="loaders" value-type="com.corrisoft.air.testload.loader.Loader">
    <ref bean="versionLoader"/>
</util:list>

<bean id="versionLoader" class="com.corrisoft.air.testload.loader.DeviceSoftwareLoader" init-method="init">
    <property name="versionDAO" ref="versionDAO"/>
</bean>

这是我得到的堆栈跟踪:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:65)
    org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
    com.corrisoft.air.data.hibernate.HibernateDAO.getCurrentSession(HibernateDAO.java:42)
    com.corrisoft.air.data.hibernate.HibernateDAO.create(HibernateDAO.java:62)
    **com.corrisoft.air.testload.loader.DeviceSoftwareLoader.load(DeviceSoftwareLoader.java:63)**
    com.corrisoft.air.testload.loader.DeviceSoftwareLoader$$FastClassBySpringCGLIB$$1d5a010d.invoke(<generated>)
    org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:711)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
    com.corrisoft.air.testload.loader.DeviceSoftwareLoader$$EnhancerBySpringCGLIB$$39a06195.load(<generated>)
    com.corrisoft.air.testload.LoadAir.load(LoadAir.java:37)
    com.corrisoft.air.web.ReloadController.handleRequestInternal(ReloadController.java:25)
    org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:154)
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.hibernate.HibernateException:没有绑定到线程的hibernate会话,并且配置不允许在此创建非事务会话
org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:65)
org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
com.corrisoft.air.data.hibernate.HibernateDAO.getCurrentSession(HibernateDAO.java:42)
com.corrisoft.air.data.hibernate.HibernateDAO.create(HibernateDAO.java:62)
**com.corrisoft.air.testload.loader.DeviceSoftwareLoader.load(DeviceSoftwareLoader.java:63)**
com.corrisoft.air.testload.loader.DeviceSoftwareLoader$$FastClassBySpringCGLIB$$1d5a010d.invoke()
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:711)
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:262)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
com.corrisoft.air.testload.loader.DeviceSoftwareLoader$$EnhancerBySpringCGLIB$$39a06195.load()
com.corrisoft.air.testload.LoadAir.load(LoadAir.java:37)
com.corrisoft.air.web.ReloadController.handleRequestInternal(ReloadController.java:25)
org.springframework.web.servlet.mvc.AbstractController.HandlerRequest(AbstractController.java:154)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javaservlet.http.HttpServlet.service(HttpServlet.java:618)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javaservlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我很困惑,因为粗体的行是我希望事务包装的行。当我查看堆栈跟踪时,我觉得它已经为我启动了一个事务。那么,为什么我会出错呢

下面是我的hibernate和DAO设置:

<jee:jndi-lookup id="airDatabase" jndi-name="java:comp/env/jdbc/airDB"/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="airDatabase" />
    <property name="packagesToScan">
        <list>
            <value>com.corrisoft.air.model</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
            hibernate.hbm2ddl.auto=create
        </value>
    </property>
</bean>

<bean id="versionDAO" class="com.corrisoft.air.data.hibernate.DeviceSoftwareVersionHibernateDAO" init-method="init">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

com.corrisoft.air.model
hibernate.dialogue=org.hibernate.dialogue.mysqldialogue
hibernate.hbm2ddl.auto=create

配置中有一个输入错误:将“其他方法”tx匹配更改为以下内容:

<tx:method name="*" propagation="REQUIRED"/>


这是打字错误吗
tx:method name=“”
?我从找到的一个示例中复制了这一点。我相信这意味着所有其他的方法。试着这样做:
@andrestefan似乎已经做到了。谢谢请张贴作为答案,以便我可以标记它。