`
sqgme
  • 浏览: 23152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SSH下Hibernate事务问题createCriteria is not valid without active transaction

阅读更多
今天在ssh下又一次遇到事务问题,异常“ createCriteria is not valid without active transaction” 找来找去发现问题在于给hibernate配置中增加了如下属性导致:
                <prop key="hibernate.current_session_context_class">thread</prop>
                <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>


去掉之后可以正常读写数据库了,目前还不知道是什么原因,哪位达人可以帮忙解释一下。

异常如下:

org.hibernate.HibernateException: createCriteria is not valid without active transaction
	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:340) ~[hibernate-core-3.5.5-Final.jar:3.5.5-Final]
	at $Proxy56.createCriteria(Unknown Source) ~[na:na]
	at org.springside.modules.orm.hibernate.SimpleHibernateDao.createCriteria(SimpleHibernateDao.java:289) ~[springside3-core-3.3.4.jar:3.3.4]
	at org.springside.modules.orm.hibernate.SimpleHibernateDao.findUniqueBy(SimpleHibernateDao.java:173) ~[springside3-core-3.3.4.jar:3.3.4]
	at sms.web.service.AccountManager.findUserByLoginName(AccountManager.java:80) ~[AccountManager.class:na]
	at sms.web.service.AccountManager$$FastClassByCGLIB$$9f03f2c8.invoke(<generated>) ~[cglib-nodep-2.2.jar:na]
	at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) ~[cglib-nodep-2.2.jar:na]
	at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) ~[spring-aop-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) ~[spring-aop-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) ~[spring-tx-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) ~[spring-aop-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at sms.web.service.AccountManager$$EnhancerByCGLIB$$f50196f0.findUserByLoginName(<generated>) ~[cglib-nodep-2.2.jar:na]
	at sms.web.actions.account.LoginAction$1.execute(LoginAction.java:59) ~[LoginAction$1.class:na]
	at base.action.WebSupport.actionExecute(WebSupport.java:228) ~[et-util-1.0-SNAPSHOT.jar:na]
	at sms.web.actions.account.LoginAction.execute(LoginAction.java:48) [LoginAction.class:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_23]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_23]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_23]
	at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_23]
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at sms.web.interceptor.CheckLoginFilter.intercept(CheckLoginFilter.java:79) [CheckLoginFilter.class:na]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at sms.web.interceptor.DebugInterceptor.intercept(DebugInterceptor.java:22) [DebugInterceptor.class:na]
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) [xwork-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) [catalina.jar:7.0.5]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.5]
	at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102) [struts2-core-2.2.1.1.jar:2.2.1.1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) [catalina.jar:7.0.5]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.5]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) [catalina.jar:7.0.5]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.5]
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) [spring-orm-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.4.RELEASE.jar:3.0.4.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) [catalina.jar:7.0.5]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.5]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) [catalina.jar:7.0.5]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [catalina.jar:7.0.5]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) [catalina.jar:7.0.5]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) [catalina.jar:7.0.5]
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) [catalina.jar:7.0.5]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.5]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) [catalina.jar:7.0.5]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) [tomcat-coyote.jar:7.0.5]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) [tomcat-coyote.jar:7.0.5]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237) [tomcat-coyote.jar:7.0.5]
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) [tomcat-coyote.jar:7.0.5]
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_23]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_23]
	at java.lang.Thread.run(Thread.java:662) [na:1.6.0_23]


================================
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>et platform</display-name>

	<!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔
		此参数用于后面的Spring Context Loader -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
            classpath:ctx-jms.xml
            classpath:ctx-platform.xml
            classpath:ctx-schedule.xml
            classpath:ctx-ws.xml
		</param-value>
	</context-param>


	<!-- CXF Servlet 配置 -->
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/ws/*</url-pattern>
	</servlet-mapping>

	<!-- Filter 定义  -->
	<!-- Character Encoding filter -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>

	<!-- Hibernate Open Session In View filter-->
	<filter>
		<filter-name>hibernateOpenSessionInViewFilter</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>

	<!-- SpringSecurity filter
	<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
       -->
	<!-- Struts2 filter -->
	<filter>
		<filter-name>struts2CleanupFilter</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
	</filter>
	<filter>
		<filter-name>struts2Filter</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<!-- 下面的filter验证页面session是否已经成功登录-->
    <filter-mapping>
		<filter-name>hibernateOpenSessionInViewFilter</filter-name>
		<url-pattern>*.action</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>


	<filter-mapping>
		<filter-name>hibernateOpenSessionInViewFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter>
		<filter-name>islogin</filter-name>
		<filter-class>sms.web.interceptor.CheckLoginFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>islogin</filter-name>
		<url-pattern>/pages/*</url-pattern>
	</filter-mapping>
	<!-- Filter 映射 -->
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<!--<filter-mapping>-->
		<!--<filter-name>hibernateOpenSessionInViewFilter</filter-name>-->
		<!--<url-pattern>/j_spring_security_check</url-pattern>-->
	<!--</filter-mapping>-->

	<!--<filter-mapping>-->
		<!--<filter-name>springSecurityFilterChain</filter-name>-->
		<!--<url-pattern>*.action</url-pattern>-->
		<!--<dispatcher>REQUEST</dispatcher>-->
		<!--<dispatcher>FORWARD</dispatcher>-->
	<!--</filter-mapping>-->

	<!--<filter-mapping>-->
		<!--<filter-name>springSecurityFilterChain</filter-name>-->
		<!--<url-pattern>/j_spring_security_check</url-pattern>-->
		<!--<dispatcher>REQUEST</dispatcher>-->
		<!--<dispatcher>FORWARD</dispatcher>-->
	<!--</filter-mapping>-->
	<filter-mapping>
		<filter-name>struts2CleanupFilter</filter-name>
		<url-pattern>*.action</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>

	<filter-mapping>
		<filter-name>struts2Filter</filter-name>
		<url-pattern>*.action</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>


	<!--Spring的ApplicationContext 载入 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Spring 刷新Introspector防止内存泄露 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- session超时定义,单位为分钟 -->
	<session-config>
		<session-timeout>20</session-timeout>
	</session-config>

	<!-- 出错页面定义 -->
	<error-page>
		<exception-type>java.lang.Throwable</exception-type>
		<location>/common_springside/500.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/common_springside/500.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/common_springside/404.jsp</location>
	</error-page>
	<error-page>
		<error-code>403</error-code>
		<location>/common_springside/403.jsp</location>
	</error-page>
</web-app>



spring 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd" default-lazy-init="false">

	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
		<property name="ignoreResourceNotFound" value="true" />
		<property name="locations">
			<list>
				<!-- 标准配置 -->
				<value>classpath*:/ctx-config/db.properties</value>
				<!-- 本地开发环境配置 -->
				<value>classpath*:/ctx.properties</value>
				<!-- 服务器生产环境配置 -->
				<value>file:/var/mini-service/application.server.properties</value>
			</list>
		</property>
	</bean>

    <bean id="springContextHolder" class="org.springside.modules.utils.spring.SpringContextHolder" lazy-init="false"/>
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${jdbc.driver}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		<property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>
		<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
		<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
		<property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>
		<property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>
		<property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTextPeriod}"/>
		<property name="maxStatements" value="${c3p0.maxStatements}"/>
		<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
	</bean>
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
               [b] <prop key="hibernate.current_session_context_class">thread</prop>
                <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>[/b][color=red][/color]
			</props>
		</property>
		<property name="packagesToScan" value="sms.entities" />
	</bean>
	<!-- 使Spring关注Annotation -->
    <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
	<!-- 事务管理器配置,单数据源事务 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- 使Spring关注Annotation -->
	<context:annotation-config />
    <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
	<context:component-scan base-package="sms" />


     <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
 <property name="transactionManager" ref="transactionManager"/>
 </bean>
	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
	<aop:config />
	<aop:aspectj-autoproxy />

</beans>

1
0
分享到:
评论
3 楼 pudong 2012-04-10  
如果hibernate.current_session_context_class=thread去掉,则

Exception in thread "main" org.hibernate.HibernateException: No Session found for current thread
 
????
2 楼 gaolinwu 2011-12-15  
该问题,正解。
这个问题一直缠绕了我一天的时间,我换了好多的接口都不好使,就是因为我加了hibernate.current_session_context_class=thread导致,去掉这句话,问题“save  is not valid without active transaction”一切正常。当然我想说的是这与配置有关,就看你怎么配置了,还有人碰到此问题话欢迎找我讨论linwu_gao@163.com,呵呵
1 楼 爱老虎哟 2011-07-02  
你好,请问你这个问题解决了没?怎么解决的?

相关推荐

    HibernateSession , Transaction 研究

    本文将深入研究Hibernate中的`Session`和`Transaction`,这两个概念是理解Hibernate工作原理的关键。 首先,让我们了解`Session`。在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的...

    SSH应用开发-Hibernate应用入门.zip_hibernate

    SSH(Struts、Spring、Hibernate)是Java Web开发中常用的一种技术栈,其中Hibernate是一个强大的对象关系映射(ORM)框架。这篇文档将详细介绍Hibernate在应用开发中的基础使用,帮助初学者快速入门。 **SSH框架...

    ssh框架模板+hibernate简单分页

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。这个压缩包文件提供了一个SSH框架模板以及使用Hibernate实现的分页功能的例子代码。 **Struts2** 是一个MVC(Model-View-...

    Hibernate3.1

    5. **事务管理**:Hibernate 3.1提供了更强大的事务管理机制,支持JTA(Java Transaction API)和JPA的Transaction API,使得事务处理更加便捷。 6. **增强的性能**:包括对数据库连接池的改进,以及对查询执行效率...

    Hibernate操作数据库的方法

    //开始事务Transaction tx = session.beginTransaction(); //获取 UserTable 对象,假设已存在ID为1的用户UserTable userTable = (UserTable) session.get(UserTable.class, 1); //如果对象存在,执行删除操作if ...

    Hibernate 手册 第一章 Hibernate入门

    Hibernate支持JTA(Java Transaction API)和JDBC事务管理。使用`Session`的`beginTransaction()`、`commit()`和`rollback()`方法可以处理事务。理解事务边界和回滚规则对于确保数据一致性至关重要。 9. 第一次运行...

    Hibernate的MySql查询.rar

    在Java企业级开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本文将深入探讨在使用Hibernate进行MySQL查询时的一些关键知识点,以帮助开发者更好地理解和应用这些技术。 ...

    hibernate讲义

    - 编程式事务管理通过 `session.beginTransaction()`、`transaction.commit()` 和 `transaction.rollback()` 手动控制事务的开始、提交和回滚。 - 声明式事务管理通常通过 Spring 框架实现,利用 AOP(面向切面...

    Hibernate练习

    3. **Transaction**: 事务管理是Hibernate的重要部分,它提供了原子性、一致性、隔离性和持久性的保证。 4. **Query和Criteria API**: Hibernate提供了HQL(Hibernate Query Language)和Criteria API来执行查询...

    Hibernate之API初识及增删改查实现案例hibernate003

    `Session.beginTransaction()`开启事务,`Transaction.commit()`提交事务,`Transaction.rollback()`回滚事务。 在“hibernate003”这个案例中,作者很可能详细讲解了以上各个步骤,并给出了具体的代码示例,帮助...

    hibernate的注册和登陆

    本实例将深入探讨如何使用Hibernate实现用户注册和登录功能,这涉及到的主要知识点包括:Hibernate的基本配置、实体类定义、数据持久化、Session接口、Transaction管理以及SQL查询的映射。 首先,要使用Hibernate,...

    hibernate课程笔记.doc

    - **Transaction**:处理事务,提供事务管理功能。 - **Criteria/Query**:提供了更高级别的查询API,可以动态构建查询条件。 ### 4. Hibernate的配置文件(`hibernate.cfg.xml`) 配置文件包含了数据库连接信息和...

    传智Hibernate框架资料

    4天的传智播客Hibernate框架课程将深入讲解这些知识点,并通过实际项目演示如何在开发中应用Hibernate,包括配置、实体映射、CRUD操作、事务管理、缓存优化等,帮助开发者快速掌握并熟练运用Hibernate框架。...

    hibernate核心代码

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java对象和数据库之间建立映射,从而简化数据操作。下面将详细讲解Hibernate的核心代码及其相关知识点。 1. **配置文件**: Hibernate的核心...

    hibernate中的相关组件的介绍

    - **事务管理**:配置Hibernate如何处理事务,包括事务的隔离级别、回滚规则等。 #### 二、POJO(Plain Old Java Object) POJO,即“简单的老式Java对象”,是Hibernate中用来映射数据库表的一个核心概念。POJO...

    myeclipse ssh

    SSH2 指的是 Struts2、Spring 和 Hibernate 三种技术的集成,这是一种常见的 Java Web 开发框架。本实例将介绍如何在 MyEclipse 6.0.1 开发环境中使用 SSH2 进行数据库操作,包括增、删、查、改的基本功能。 首先,...

    Hibernate_day01.zip

    4. **Transaction管理**:通过`Session.beginTransaction()`开始事务,`transaction.commit()`提交事务,`transaction.rollback()`回滚事务,确保数据操作的原子性。 5. **Criteria API的子查询**:可以创建子查询...

    Hibernate分页显示和添加

    在实际项目中,为了防止并发问题,我们通常会使用事务管理。在上述操作前后,需要开启和提交事务。 ```java Transaction transaction = session.beginTransaction(); // ... 执行上述添加或查询操作 transaction....

    一个很简单的hibernate例子

    6. Transaction:在Hibernate中,数据库操作通常在事务中进行,以确保数据的一致性。`Session`提供了开始、提交和回滚事务的方法。 7. HQL(Hibernate Query Language)或 Criteria API:这两者是Hibernate提供的...

    Hibernate基础教程

    Hibernate支持JTA(Java Transaction API)和JDBC事务管理。在应用程序中,可以通过编程式或声明式的方式来管理事务。 本教程的"基础Hibernate 教程.txt"文件,可能包含了关于这些知识点的详细讲解,包括代码示例和...

Global site tag (gtag.js) - Google Analytics