Spring学习总结9(基于Hibernate的事务管理)

来源:互联网 发布:万国司考网络课程 编辑:程序博客网 时间:2024/05/16 14:47

基于注解形式的事务管理

 

XML配置

 

代码示例

类名上也可以写事务注解,但是优先级低于方法上的事务注解

 

 

@Transactional 注解的属性 属性类型描述propagation枚举型:Propagation可选的传播性设置 默认为requiredisolation枚举型:Isolation可选的隔离性级别(默认值:ISOLATION_DEFAULTreadOnly布尔型读写型事务 只读型事务(当查询时设为只读会比不设要快)timeoutint型(以秒为单位)事务超时rollbackFor一组 Class 类的实例,必须是Throwable 的子类一组异常类,遇到时 必须 进行回滚。默认情况下checked exceptions不进行回滚,仅unchecked exceptions(即RuntimeException的子类)才进行事务回滚。rollbackForClassname一组 Class 类的名字,必须是Throwable的子类一组异常类名,遇到时 必须 进行回滚noRollbackFor一组 Class 类的实例,必须是Throwable 的子类一组异常类,遇到时 必须不 回滚。noRollbackForClassname一组 Class 类的名字,必须是Throwable 的子类一组异常类,遇到时 必须不 回滚

 

事务传播特性详解:

1.required

如果在执行该方法之前,已经打开了一个事务,会将当前方法加入到之前的事务之中。如果没有,则自己新开一个事务。

 

2.requiredsNew

 

 

如果在执行该方法之前,已经打开了一个事务,会挂起之前的事务,自己新开一个事务。当自己的事务执行完之后,再进行之前的事务。

 

3.mandatory

在调用方法之前,必须已经打开了一个事务,否则将会抛出异常

 

4.nested

如果在执行方法前,已经打开了一个事务,则再开一个新事务内嵌在之前的事务之中。

nested与required的区别:nested注解的方法,如果事务回滚不会影响到之前的事务

nested与requiredsNew的区别:nested注解的方法,如果之前的事务,在nested已经执行完之后,事务进行了回滚,也会让nested里的事务进行回滚

 

5.never

如果在执行该方法之前,已经打开了一个事务,则抛出异常

 

6.not_supported

注解not_supported的方法不支持事务。如果在执行该方法之前,已经打开了一个事务,将之前的事务挂起,执行完该方法之后,在继续进行之前的事务

 

7.supported

如果在执行该方法之前,已经打开了一个事务,支持之前的事务,如果没有打开事务,则也不打开新的事务。即与调用supported注解的方法的事务保持一致,它有我就有,它无我就无

 

基于XML的事务管理(常用)

将上面XML中的<tx:annotation-driven transaction-manager="txManager"/>给去掉,增加如下的配置

 

 

 

 

 

 

 

 

 

 


 

原创粉丝点击