问题描述
spring的配置文件<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd"><beanid="c3p0dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="driverClass"value="${jdbc.driverClassName}"/><propertyname="jdbcUrl"value="${jdbc.url}"/><propertyname="user"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/><!--初始化时获取的连接数--><propertyname="initialPoolSize"value="${jdbc.initialPoolSize}"/><!--连接池中保留的最小连接数。--><propertyname="minPoolSize"value="${jdbc.minPoolSize}"/><!--连接池中保留的最大连接数。--><propertyname="maxPoolSize"value="${jdbc.maxPoolSize}"/><!--最大空闲时间,60秒内未使用则连接被丢弃。--><propertyname="maxIdleTime"value="${jdbc.maxIdleTime}"/><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。--><propertyname="acquireIncrement"value="${jdbc.acquireIncrement}"/><!--每60秒检查所有连接池中的空闲连接。--><propertyname="idleConnectionTestPeriod"value="${jdbc.idleConnectionTestPeriod}"/></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><propertyname="dataSource"ref="c3p0dataSource"/><propertyname="hibernateProperties"><props><propkey="hibernate.dialect"><!--数据库方言oracle11g仍然采用10g的org.hibernate.dialect.Oracle10gDialect--><!--目前采用mysql数据库,以后采用oralce11g-->org.hibernate.dialect.MySQLDialect</prop><propkey="hibernate.show_sql">true</prop><propkey="hibernate.format_sql">true</prop><propkey="hibernate.hbm2ddl.auto">update</prop><propkey="hibernate.connection.release_mode">after_statement</prop><propkey="hibernate.current_session_context_class">thread</prop><propkey="hibernate.cache.use_second_level_cache">true</prop><propkey="hibernate.cache.use_query_cache">true</prop><propkey="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</prop><propkey="hibernate.ehcache_config_file">com/avicit/resource/ehcache.xml</prop></props></property><propertyname="packagesToScan"value="com.avicit.fes.**.domain"/></bean><beanid="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><propertyname="sessionFactory"ref="sessionFactory"/></bean><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="*"propagation="REQUIRED"read-only="true"/><tx:methodname="do*"propagation="REQUIRED"/></tx:attributes></tx:advice><aop:config><aop:advisoradvice-ref="txAdvice"pointcut="execution(*com.avicit..service..*.*(..))"/></aop:config><aop:aspectj-autoproxyproxy-target-class="true"/></beans>
service中的方法:@AutowiredprivateGeneralHibernateDaohibernateDao;@OverridepublicvoidselectSimple(){logger.debug(hibernateDao);hibernateDao.find(SimpleController.class);}
DAO中的方法publicabstractclassAbstractHibernateDao<T,ID>implementsHibernateDao<T,ID>{@AutowiredprivateSessionFactorysessionFactory;protectedSessiongetSession(){returnsessionFactory.getCurrentSession();}}publicclassGeneralHibernateDaoextendsAbstractHibernateDao{publicObjectget(Classclazz,Serializableid){returngetSession().get(clazz,id);}publicList<?>find(Classclazz,Object...params){returnthis.findPageByHql(buildHQLByClass(clazz),params);}}
调用出现的错误信息:org.hibernate.HibernateException:createQueryisnotvalidwithoutactivetransactionatorg.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:348)at$Proxy14.createQuery(UnknownSource)atcom.avicit.framework.support.dao.impl.AbstractHibernateDao.createHQLQuery(AbstractHibernateDao.java:121)atcom.avicit.framework.support.dao.impl.AbstractHibernateDao.findPageByHql(AbstractHibernateDao.java:67)atcom.avicit.framework.support.dao.impl.GeneralHibernateDao.find(GeneralHibernateDao.java:19)atcom.avicit.fes.system.simple.service.impl.SimpleServiceImpl.selectSimple(SimpleServiceImpl.java:23)atcom.avicit.fes.system.simple.controller.SimpleController.index(SimpleController.java:32)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:597)atorg.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)atorg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:690)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)atjava.lang.Thread.run(Thread.java:619)
解决方案
解决方案二:
<propkey="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
我更改了这项配置,还是报错,错误如下:严重:Servlet.service()forservletspring-dispatherthrewexceptionorg.hibernate.HibernateException:NoSessionfoundforcurrentthreadatorg.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)atorg.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1041)atcom.avicit.framework.support.dao.impl.AbstractHibernateDao.getSession(AbstractHibernateDao.java:24)atcom.avicit.framework.support.dao.impl.AbstractHibernateDao.createHQLQuery(AbstractHibernateDao.java:121)atcom.avicit.framework.support.dao.impl.AbstractHibernateDao.findPageByHql(AbstractHibernateDao.java:67)atcom.avicit.framework.support.dao.impl.GeneralHibernateDao.find(GeneralHibernateDao.java:19)atcom.avicit.fes.system.simple.service.impl.SimpleServiceImpl.selectSimple(SimpleServiceImpl.java:23)atcom.avicit.fes.system.simple.controller.SimpleController.index(SimpleController.java:32)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:597)atorg.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)atorg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:690)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)atjava.lang.Thread.run(Thread.java:619)
求各位大侠赐教!
解决方案三:
大哥我也在找这个问题,同求!
解决方案四:
路过帮顶,hibernate都出到4了啊
解决方案五:
mark..我也遇到这个问题了
解决方案六:
在Dao里应该有一个sessionFactory的set方法吧。我是用的是javax.annotation.Resource的annotation。在Spring配置文件中transactionManager声明下面annotation的配置如下:<tx:annotation-driventransaction-manager="transactionManager"/>
之后在Dao里这样获取sessionFactory:privateSessionFactorysessionFactory;publicSessionFactorygetSessionFactory(){returnsessionFactory;}@ResourcepublicvoidsetSessionFactory(SessionFactorysessionFactory){this.sessionFactory=sessionFactory;}
希望对你有帮助
解决方案七:
hibernateDao没有注入进去啊,没有hibernateDao这样的bean啊
解决方案八:
@ComponentpublicclassGeneralHibernateDaoextendsAbstractHibernateDao{publicObjectget(Classclazz,Serializableid){returngetSession().get(clazz,id);}publicList<?>find(Classclazz,Object...params){returnthis.findPageByHql(buildHQLByClass(clazz),params);}}加注解
解决方案九:
service的实现类加了@Component还是一样报错org.hibernate.HibernateException:NoSessionfoundforcurrentthread啊……
解决方案十:
我也是这个问题,求教啊
解决方案十一:
帮顶,请教....
解决方案十二:
加上这个试试<tx:methodname="get*"propagation="REQUIRED"read-only="true"/>
解决方案十三:
引用4楼nijimin100的回复:
mark..我也遇到这个问题了
fuck,我没遇到这个问题
解决方案十四:
service层缺少一个注解,或者在spring的配置文件中加一个aop的配置,楼主在service类上面加上一个这个试试@transaction
解决方案十五:
这是涉及到一个opensessioninview的东东
解决方案:之前也遇上这个问题,执行的类要和切入点一致才行
解决方案:好久没用过ssh了,帮顶
其他方案:
http://blog.csdn.net/wzk527/article/details/8543480
解决方案:spring3hibernate4整合所有方法必须开启事物。。