2. Spring Framework 支持的事务属性
1) PROPAGATION_REQUIRED --支持当前的事务,如果不存在就创建一个新的。这是最常用的选择。
2) PROPAGATION_SUPPORTS --支持当前的事务,如果不存在就不使用事务。
3) PROPAGATION_MANDATORY --支持当前的事务,如果不存在就抛出异常。
4)PROPAGATION_REQUIRES_NEW --创建一个新的事务,并暂停当前的事务(如果存在)。
5) PROPAGATION_NOT_SUPPORTED --不使用事务,并暂停当前的事务(如果存在)。
6) PROPAGATION_NEVER --不使用事务,如果当前存在事务就抛出异常。
7) PROPAGATION_NESTED --如果当前存在事务就作为嵌入事务执行,否则与PROPAGATION_REQUIRED类似。
3. 注意事项
1)PROPAGATION_REQUIRES_NEW 与 PROPAGATION_NESTED
PROPAGATION_REQUIRES_NEW 启动一个新的, 不依赖于环境的 "内部" 事务. 这个事务将被完全 commited 或 rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等. 当内部事务开始执行时, 外部事务将被挂起, 内务事务结束时, 外部事务将继续执行.
另一方面, PROPAGATION_NESTED 开始一个 "嵌套的" 事务, 它是已经存在事务的一个真正的子事务. 潜套事务开始执行时, 它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交. Savepoint需要最新的JDBC规范来支持。JDBC3?
由此可见, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于, PROPAGATION_REQUIRES_NEW 完全是一个新的事务, 而 PROPAGATION_NESTED 则是外部事务的子事务, 如果外部事务 commit, 嵌套事务也会被 commit, 这个规则同样适用于 roll back.
2)Required和mandatory事务属性
一般写操作配置成这两种事务。
两种都支持transaction context. 区别在如果调用时没有transaction context, Required的会发起一个新的事务。而mandatory的会抛出异常。
深层次的区别基于下面的规则:
With the exception of the stateful session bean, the method that starts a transaction must be the same method that terminates the transaction.
因为Required不能确认事务是否是在此方法中启动的还是从外面传进来的,因此不知道是否该做rollback这种处理当出现异常时。而Mandatory确认事务都是从外面传入的,因此知道自己不需要处理这种逻辑。
也就是说,如果事务不是在该层发起(客户端发起传入的),那么该层写操作就配置成Mandatory属性,要求调用方必须传入Transaction context;反之事务发起的层写操作应该设成required, 因为它可以控制事务的发起,回滚,提交等。
分享到:
相关推荐
<tx:transaction attribute="REQUIRED" /> ``` - 或者,使用Declarative Services(DS)的XML配置: ```xml ``` 5. **处理类加载器问题**: - 由于OSGi的类加载机制,同一个类可能由不同的类...
Mongoid交易 该gem用于使用TokuMx提供的Transaction API以及mongoid。 ##请勿使用此GEM(如果您看到此行)。 工作正在进行中。 安装 将此行添加到您的应用程序的Gemfile中: ...,set,update_attribute)
此部分主要围绕`MTL_TRANSACTION_TYPES`表展开,并对其结构、索引以及权限设置等方面进行全面剖析。 ### MTL_TRANSACTION_TYPES表详解 #### 表结构 `MTL_TRANSACTION_TYPES`是库存管理系统中用于记录交易类型的...
- `attribute_group_id`: 与`attribute_group`表关联,表示属性组的描述。 - `language_id`: 与语言表关联,表示描述的语言版本。 - `name`: 属性组的名称。 8. **Banner 表**: - `banner_id`: 广告的唯一标识...
A transaction log that records changes made to the file system. This log is crucial for crash recovery and maintaining the integrity of the file system. ##### NTFS Files: $Volume (3) Contains ...
[Transaction] public void SaveData() { // 数据库操作 } } ``` 当调用`SaveData`方法时,我们可以通过反射获取到`TransactionAttribute`,并使用`ExecuteWithTransaction`方法来包装业务逻辑,确保在事务中...
这是因为在E-R图中,实体(Entity)用矩形表示,属性(Attribute)用椭圆表示,而关系(Relationship)则用菱形表示,以此区分不同概念的视觉呈现。 6. **SQL Server的登录认证机制**:SQL Server支持两种登录认证...
系统更新准备工具可修复 Windows 7、Windows Vista、Windows ...0x8007371B ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 一个或多个要求的事务成员不存在。 0x80070490 ERROR_NOT_FOUND Windows 无法搜索新更新
系统更新准备工具可修复 Windows 7、Windows Vista、Windows ...0x8007371B ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 一个或多个要求的事务成员不存在。 0x80070490 ERROR_NOT_FOUND Windows 无法搜索新更新。
实体类需要标记为`NHibernate.Mapping.Attributes.ClassAttribute`,并且属性通常使用`PropertyAttribute`或`IdAttribute`标记。 3. **映射文件(Mapping Files)**:映射文件定义了实体类与数据库表之间的关系。它...
use stun_codec :: rfc5389 :: {attributes :: Software, methods :: BINDING, Attribute}; // Creates a message let mut message = Message :: new (MessageClass :: Request, BINDING, TransactionId :: new ([ 3...
4. **属性映射(Attribute Mapping)** 使用`@Id`、`@GeneratedValue`来标识主键,其他字段可以通过`@Column`注解进行映射。还可以使用`@ManyToOne`、`@OneToOne`、`@OneToMany`、`@ManyToMany`等注解处理关联关系...
- 类属性到表列的映射 (`Class attribute to table column`) - 类间关系到表间关系的映射 (`Class relationship to table relationship`) 4. **配置 hibernate.cfg.xml** - 配置信息包括: - **持久化映射** ...
<attribute name="inputType">org.drools.decisiontable.InputType.XLS</attribute> <cell>700 <cell>High <cell>Approved <!-- 更多规则行 --> ``` ##### 4. **复杂事件处理...
5. **FLD07: TRANSACTION DATE AND TIME** - 类型:定长 - 长度:10字节 - 描述:交易日期和时间,格式为YYMMDDHHMM。 6. **FLD11: SYSTEM TRACE AUDIT NUMBER (STAN)** - 类型:定长 - 长度:6字节 - 描述:...
3. 属性(Attribute):每个类都包含一些变量,代表对象的状态。例如,`Account`类可能有`balance`属性来记录账户余额。 4. 方法(Method):类中定义的函数称为方法,用于操作或改变对象的状态。如`deposit()`和`...
- **映射细节**:定义 Java 类(Classname)与数据库表(table name)、主键(Id)与表的主键列(pk)、类属性(Class attribute)与表列(table columns)以及类间关系(Class relationship)与表间关系。...
int attribute; // 保留 } ISO8583; ``` #### 四、具体字段实例 接下来我们来看几个具体的字段实例,以便更深入地理解每个字段的含义及其在实际应用中的用法。 1. **位图(Extended Bitmap, FLD1)** - 类型:定...