- 译者序
- 前言
- 本书怎么使用
- 本书排版字体约定
- 本书网站
- 致谢
- 第一部分 Hibernate 快速入门
- 第 1 章 安装和设置
- 第 2 章 映射简介
- 第 3 章 驾驭 Hibernate
- 第 4 章 集合与关联
- 第 5 章 更复杂的关联
- 第 6 章 自定义值类型
- 第 7 章 映射标注
- 第 8 章 条件查询
- 第 9 章 浅谈 HQL
- 第二部分 与其他工具的集成
- 第 10 章 将 Hibernate 连接到 MySQL
- 第 11 章 Hibernate 与 Eclipse:Hibernate Tools 使用实战
- 第 12 章 Maven 进阶
- 第 13 章 Spring 入门:Hibernate 与 Spring
- 第 14 章 画龙点睛:用 Stripes 集成 Spring 和 Hibernate
- 附录 A Hibernate 类型
- 附录 B Criteria API
- 附录 C Hibernate SQL 方言
- 附录 D Spring 事务支持
- 附录 E 参考资源
- 作者简介
- 封面介绍
使用 Spring Framework 的事务标注
在具体的类或者接口上可以添加 Transactional 标注,为类或方法增加事务管理。如果用 Transactional 对一个类进行标注,其设置将会应用到类中定义的每个方法。如果用 Transactional 对一个方法进行标注,事务设置将只应用到某个单独的方法。如果对类和方法都是应用了 Transactional 标注,对方法进行的标注比对类进行的标注具有更高的优先权。
通过 Transactional 标注,可以控制事务的隔离级别、超时时间、传播(propagation)设置以及会导致事务回滚的一组异常。例如,如果我们希望总是用可序列化的隔离级别创建一个新的事务,在一分钟之内没有完成或发生了 NumberFormatException 异常,就回滚事务,就可以编写类似例 D-1 所示的代码。
例 D-1:更多的事务配置控制选项
@Transactional(readOnly=false,
propagation=Propagation.REQUIRES_NEW,
isolation=Isolation.SERIALIZABLE,
rollbackFor={NumberFormatException.class},
timeout=60)
public abstract void run();
如果使用 Transactional 标注,需要小心选择标注放置的位置。如果先使用了 Spring 中的代理,或者准备要研究一下 Spring 中为 Aspect-Oriented Programming(AOP)提供的引人注目的支持,你需要注意尽可能避免把 Transactional 标注放到接口上,还需要注意要将 Transactional 标注放在非 public 的方法上。在这个示例中,因为我们没有使用任何 Spring 的 AOP 功能,所以就把 Transactional 标注放在了一个接口上。如果你正在为一个系统调试错误,其中省略了 Transactional 标注,这时需要做的第一件事情就是验证标注过的方法是否是 public 的。如果使用 AspectJ 或早期的 Spring AOP 功能,在使用代理或 AOP 时,总会遇到些令人混淆的问题。如果决定使用 Spring 的 AOP 功能,就应该记得务必将 @Transactional 标注放在具体的类上。
注意:如果对这些术语不熟悉,看看下面表格的解释会有帮助。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论