hibernate.connection.autocommit=false没有效果

yongzhong 发布于 2014/04/15 21:49
阅读 2K+
收藏 0
<!--Define the sessionFactory of hibernate4 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.connection.autocommit">false</prop>
				<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext
				</prop>
			</props>
		</property>
		
	</bean>


这样配置过后DAO层里使用sessionFactory.getCurrentSession().saveOrUpdate()方法仍然可以保存到数据库.求解?

事务配置

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

	<aop:config proxy-target-class="true">
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* 项目..*.*(..))" />
	</aop:config>




加载中
0
LucEsape
LucEsape

事务的控制是有异常时回滚。你throw new RuntimeException(); 试试就知道了

LucEsape
LucEsape
回复 @颜_ : 客气了 :)
yongzhong
yongzhong
回复 @贰狮叔 : 谢谢了,看来是我的书还看的不够透彻
LucEsape
LucEsape
回复 @颜_ : 两个dao操作就有2个connection session,事务只对当前session有效
yongzhong
yongzhong
回复 @贰狮叔 : 我把事务的配置注销掉以后测试了同一事务里两个数据库操作,第一个能够保存,第二个抛出错误后第一个没有被回滚,但这在autocommit为false的情况下还是自动提交的
LucEsape
LucEsape
回复 @颜_ : 那说明你Exception没有配置好,只配置了默认的RuntimeException。
下一页
0
Lyuans
Lyuans

你自己卡个事务嘛

yongzhong
yongzhong
卡事务?
0
蔡佳娃
蔡佳娃

看看你的MYSQL数据库用的什么引擎,默认的是MyISAM是不支持事务的,应该使用InnoDB

yongzhong
yongzhong
是inno的
0
蔡佳娃
蔡佳娃

你既然配置了事物,没有异常的化就会正常提交

0
fmpoffice
fmpoffice
建表的人没建成InnoDB(mysql)
返回顶部
顶部