问题描述
controller层调用service@RequestMapping("/test.html")publicStringtest(ModelMapmap){testService.t();//调用servicereturnTemplateKeys.INDEX;}/////////////serviceDevicedevice=newDevice();device.setDeviceDesc("test");d.saveOrUpdate(device);floatf=1/0;//故意抛出异常,测试Menu1me=newMenu1();me.setMenu1Desc("dddd");menu1DAO.save(me);在上面代码中测试,但最终结果是device仍旧插入数据库里,没有回滚下面是applicationContext.xml配置<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><propertyname="driverClass"value="${jdbc.driver}"/><propertyname="jdbcUrl"value="${jdbc.url}"/><propertyname="user"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/><propertyname="minPoolSize"value="${jdbc.minPoolSize}"/><propertyname="maxPoolSize"value="${jdbc.maxPoolSize}"/><propertyname="initialPoolSize"value="${jdbc.initialPoolSize}"/><propertyname="maxIdleTime"value="${jdbc.maxIdleTime}"/><propertyname="acquireIncrement"value="${jdbc.acquireIncrement}"/><propertyname="acquireRetryAttempts"value="${jdbc.acquireRetryAttempts}"/><propertyname="acquireRetryDelay"value="${jdbc.acquireRetryDelay}"/><propertyname="testConnectionOnCheckin"value="${jdbc.testConnectionOnCheckin}"/><propertyname="automaticTestTable"value="${jdbc.automaticTestTable}"/><propertyname="idleConnectionTestPeriod"value="${jdbc.idleConnectionTestPeriod}"/><propertyname="checkoutTimeout"value="${jdbc.checkoutTimeout}"/></bean><!--事物配置--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"></property></bean><aop:config><aop:pointcutid="serviceOperation"expression="execution(*com.asc.service.*.*(..))"/><aop:advisorpointcut-ref="serviceOperation"advice-ref="txAdvice"/></aop:config><!--配置事务通知--><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="*"rollback-for="Exception"/></tx:attributes></tx:advice>忘高手指导
解决方案
解决方案二:
把异常和他上边一行调换位置看看。
解决方案三:
跟顺序没关系,试了下不行的
解决方案四:
测试代码
解决方案五:
正在学习中!!!!!!!!!!!!!!!!!!
解决方案六:
学习中····
解决方案七:
你所使用数据库实例是否支持事务?
解决方案八:
学习中。。。
解决方案九:
同样问题!纠结中。。。。
解决方案十:
数据库当然支持事务的了
解决方案十一:
这并不是事务没起作用,只不过是DataSourceTransactionManager是自动提交的方式。你不妨做一个小实验,在service层打开事务。然后在service层依次调用两个dao的操作如下面例子publicclassSomeServiceImplimplementsSomeService{@ResourceprivateSqlMapClientTemplatesmct;publicvoiddoSomething(){smct.insert(....);if(0<1){thrownewRuntimeException("故意抛一场");}smct.insert(...);}}你把上面的service执行一次,如果第一条插入语句没有成功的话,说明你的事务配置没有问题的。顺便说一下,你结贴率太低了!!!