第4章 Hibernate事务及并发.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate ORM 最佳实践 第4章 Hibernate事务与并发 回顾 了解Hibernate持久对象的生命周期管理 理解Session的缓存机制 掌握Hibernate中操作对象的几种方法以及最佳实现 掌握Hibernate的查询方式及实现 目标 了解Hibernate事务 理解数据库并发操作 事务隔离级别 掌握Hibernate的并发控制 事务概念 所谓事务,就是为了完成一个工作单元执行的一系列操作,这些操作是相互依赖的,要么全部执行成功,要么全部失败 Hibernate事务 Hibenate本身没有事务管理能力,而是依赖于底层的JDBC API和JTA API,并将其进行封装. Hibernate事务类型 同步Session和数据库 刷新模式 可以使用Session.setFlushMode(FlushMode)设置 事务并发问题 更新丢失(一个事务的回滚影响到另一事务的更新结果) 脏读(事务在执行过程中访问到了其它事务未提交的数据) 不可重复读(事务在执行过程中再次读取同一数据时,发现其他事务对此数据进行了更新)原因是因为另一个事务执行的update操作 幻想读(事务在执行过程中再次执行同一查询时,发现其它事务的更新)原因是另一个事务执行的insert和delete操作 示例-1 示例-2 事务隔离级别 读未提交级别-1 读已提交级别-2 可重复读级别-4 串行化事务-8 Hibernate并发控制 在应用程序中采用悲观锁和乐观锁解决 悲观锁-1 悲观锁-2 示例 代码 乐观锁-1 Hibernate利用版本检查或时间戳来实现乐观锁,不是作为数据库层次锁定。 示例 代码-1 代码-2 结果 乐观锁-2 时间戳实现乐观锁(timestamp) 事务划分原则 合理事务划分,有助于预防deadlock,提高系统响应时间。 总结 了解Hibernate事务 理解数据库并发操作 事务隔离级别 掌握Hibernate的并发控制 Hibernate ORM Hibernate ORM 事物初始状态 A:从帐户A取 100元 B:给帐户B 加100元 某个操作失 败,事务回滚 到初始状态 (事务开始) 事物初始状态 (事务成功) 事务具备4个特性:ACID 通过调用session.beginTransaction()返回一个 Transaction对象,开始一个事务.该对象提供commit()和 rollback()来提交和回滚事务. Interface Transaction begin() commit() Rollback() CMTTransaction begin() commit() Rollback() begin() commit() Rollback() begin() commit() Rollback() JTATransaction JDBCTransaction CMTTransactionFactory JTATransactionFactory JDBCTransactionFactory Interface TransactionFactory createTransaction():Transaction createTransaction():Transaction createTransaction():Transaction createTransaction():Transaction 在Hibernate可以配置三种类型事务 运行在不同的环境中,如图:不同类 实现Transaction接口 在hibernate配置文件,利用属性 hibernate.transaction.factory_class来 明确一个事务工厂产生某一类事务的 实例. Hibernate默认事务类型 * 每执行一次操作刷新一次 FlushMode.ALWAYS (默认)自动更新 FlushMode.AUTO 在事务提交前刷新Session FlushMode.COMMIT 手动刷新模式 FlushMode.MANUAL T2 T1 T3 T4 T5 T6 T7 T8 取款事务 存款事务 事务开始 查询余额100 事务开始 查询余额100 -10(90) +20(120) 提交事务 事务回滚(100) 导致更新丢失 T2 T1 T3 T4 T5 T6 T7 T8 事务开始 查询余额100 事务开始 -10(90) 查询余额90 +20(110) 提交事务 事务回滚(100) Dirty Read未提交数据 T2 T1 T3 T4 T5 T6 T7 T8 存款事务1 存款事务2 事务开始 查询余额100 事务开始 查询余额100 +20(120) +20(120) 提交事务 提交事务 两

您可能关注的文档

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档