sqlserver截取字符串函数
最近一直在使用SQLServer数据库,里面的查询等操作与MySQL有所不同,所以还是需要多花点时间学习,今天Leader在我这里指导工作,现场纯熟地操作了一番数据库,着实让我佩服,简单记录一下下午学...
2024.11.14那么如果baseDao.saveObject(detail)异常,整个B方法全部回滚。没问题
但是
如果我在配置事务的时候仅仅对 name="B",并且不对A进行配置事务,如下:
那么如果baseDao.saveObject(detail)异常,方法B不能全部回滚(也就是说虽然baseDao.saveObject(detail)没有保存成功,但是baseDao.saveObject(user)保存成功了)
在 spring 中一共定义了六种事务传播属性,如下
PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
前六个策略类似于EJB CMT,第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊变量。
它要求事务管理器或者使用JDBC 3.0 Savepoint API提供嵌套事务行为(如Spring的DataSourceTransactionManager)
研究源码、调试程序得出结论:
A如果没有受事务管理: 则线程内的connection 的 autoCommit为true。
B得到事务时事务传播特性依然生效,得到的还是A使用的connection,但是 不会改变autoCommit的属性。
所以B当中是按照每条sql进行提交的。
在一个Service内部,事务方法之间的嵌套调用,普通方法和事务方法之间的嵌套调用,都不会开启新的事务.是因为spring采用动态代理机制来实现事务控制,而动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了!
解决办法:
可以把方法B放到另外一个service或者dao,然后把这个server或者dao通过@Autowired注入到方法A的bean里面,这样即使方法A没用事务,方法B也可以执行自己的事务了。
最近一直在使用SQLServer数据库,里面的查询等操作与MySQL有所不同,所以还是需要多花点时间学习,今天Leader在我这里指导工作,现场纯熟地操作了一番数据库,着实让我佩服,简单记录一下下午学...
2024.11.14大家好,我是晨希,上一篇我们讲解了SQL Server 数据库中的触发器和简单用法,今天我们继续学习一下SQL Server 数据库中的基本语法和使用方法,在数据库开发中,触发器是一种特殊的数据库对象...
2024.11.09public interface AMapper{public void batchUpdateA(List aList>);}mysqlupdate a set name = #{a.name,jd...
2024.11.12SQLServer和MySQL都是大家常用的数据库,她们基本兼容SQL-92标准,但语法风格还是有一些不同,下面列举一部分两者常用SQL片段的差异,权当抛砖引云,其实两者之间的细微差异多着呢。查看表结...
2024.11.12MySQL和Oracle都是流行的关系数据库管理系统(RDBMS),在世界各地广泛使用;大多数数据库以类似的方式工作,但MySQL和Oracle的这里和那里总是存在一些差异的。本篇文章就给大家比较Or...
2024.11.15