spring事务aop配置如下:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException" />
<tx:method name="insert*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.RuntimeException" />
<tx:method name="update*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="select*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
问题如下:
如果我dao方法命名为:updateUser 则会满足配置, 则会打开事务。日志提示:Creating new transaction
假如我命名为:refeshUser 则不会打开事务 日志提示:no transaction
两种数据库底层有啥差别? 我看到的效果是一样的, 为什么 no transaction 事务照样插入成功。
我百度“事务”为何物?通过将一组相关操作组合为一个要么全部成功要么全部失败的单元
------解决思路----------------------
没开事务照样保存成功的,那是因为,没开事务等同于每条SQL一个事务,当你有多个SQL 在执行时,那么程序就会停在第一个出错的地方,前面的已经提交了,后面的就终止了,因此这个时候的数据库的数据的状态彼此之间就不一致,就好像刚才说的,A账户少了钱,但B账户没有多出那么多钱来,这就是错误。