·事务的传播机制:(不是JDBC事务管理)用来解决业务层的事务之间调用的问题。
PROPAGATION_REQUIRED :支持(使用)当前事务,如果不存在事务就创建一个新事务
*方法A中调用方法B: 如果方法A有事务,B方法就使用方法A的事务。如果A没有事务,就创建一个新事务。(A,B在同一个事务中)
PROPAGATION_SUPPORTS :支持(使用)当前事务,如果不存在事务就不使用事务
PROPAGATION_MANDATORY :支持(使用)当前事务,如果不存在就抛出异常
PROPAGATION_REQUIRES_NEW :如果有事务存在,则挂起当前事务,创建一个新事务。(不在同一事务)
PROPAGATION_NOT_SUPPORTED :已非事务的方式运行,如果有事务存在,则挂起当前事务。
PROPAGATION_NEVER :已非事务的方式运行,如果有事务存在,则抛出异常。
PROPAGATION_NESTED : 如果当前事务存在,则嵌套事务执行
*基于savePoint(保存点)技术
*方法A.B: A有事务,A执行之后,将A事务执行之后的内容保存到savePoint,如果B事务出现异常的话,用户需要自己设置提交事务还是回滚。
常用的:
PROPAGATION_REQUIRED
PROPAGATION_REQUIRES_NEW
PROPAGATION_NESTED
·关于事务挂起的举例:(某事务挂起之后,任何操作都不在该事务的控制之下)
例如: 方法A支持事务,方法B不支持事务。 即PROPAGATION_NOT_SUPPORTED
方法A调用方法B。
在方法A开始运行时,系统为它建立Transaction,方法A中对于数据库的处理操作,会在该Transaction的控制之下。
这时,方法A调用方法B,方法A打开的 Transaction将挂起,方法B中任何数据库操作,都不在该Transaction的管理之下。
当方法B返回,方法A继续运行,之前的Transaction回复,后面的数据库操作继续在该Transaction的控制之下 提交或回滚。