Hiberntae事务处理.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hiberntae事务处理

开源O/R映射框架;数据库事务介绍 事务的定义 事务的ACID属性 数据库事务声明 通过Hibernate声明JDBC事务 通过Hibernate声明JTA事务 并发控制 多个事务并发引起的问题 事务隔离级别 在应用程序中解决不可重复读问题 乐观锁(Optimistic Locking) 悲观锁(Pessimistic Locking);事务是指一组相互信赖的操作行为。这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性。 数据库事务是对现实生活中事务的模拟,它由一组在业务逻辑上相互信赖的SQL语句组成。 示例:银行转帐操作。 ;ACID: 原子性(Atomic): 指整个数据库事务是不可分割的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发生。 一致性(Consistency): 一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。 隔离性(Isolation): 指多个事务同时操作同一数据时,每个事务都有各自的完整数据空间。 持久性(Durability): 一旦事务完成,事务的结果应该持久化。 ;数据库事务声明;数据库系统的客户程序只要向数据库系统声明了一个事务,数据库系统就会自动保证事务的ACID特性。 声明事务包含: 事务的开始边界:开始事务。 事务的正常结束边界:提交事务。 事务的异常结束边界:回滚事务。 数据库系统支持两种事务模式: 自动提交事务(隐式事务): 每个SQL语句都是一个独立的事务,当数据库系统执行完一条SQL语句后,会自动提交事务。 手工提交事务(显式事务):必须由数据库系统的客户程序显式指定事务开始边界和结束边界。;Java高端培训;Hibernate本身在设计时并不具备事务处理功能Hibernate只是将底层的JDBCTransaction或者JTATransaction进行了一下封装,在外面套上Transaction和Session的外壳,其实底层都是通过委托底层的JDBC或JTA来实现事务的调度功能。;如果Hibernat持久层运行在一个非托管环境中,可以在hibernate配置文件中指定使用的是JDBC事务。 注:如果不进行配置,Hibernate也会默认使用JDBC事务。 ;不管事务成功与否,最后都应该调用Session的close()方法来关闭Session。 即使事务中只包含只读操作,也应该在事务执行成功后提交事务,并且在事务执行失败时撤销事务。 因为在提交或撤销事务时,数据库会释放事务所占用的资源,有利于提高数据库的运行性能。 一个Session可以包含多个Transaction实例,也就是说,一个Session可以对应多个事务。 如果在执行Session的一个事务时出现了异常,就必须立即关闭这个Session,不能再利用这个Session来执行其他的事务。;Hibernat持久层运行在一个托管环境中,可以使用JTA;并发控制 多个事务并发引起的问题 事务隔离级别 在应用程序中解决不可重复读问题 乐观锁(Optimistic Locking) 悲观锁(Pessimistic Locking);多个事务同时访问数据库中相同的数据时,如果没有采取必要的隔离机制,就可能会发生如下并发问题: 第一类丢失更新:撤消一个事务时,把其它事务已提交的更新数据也撤消了。 脏读:一个事务读到另一个事务未提交的更新数据。 不可重复读:一个事务读到另一个事务已经提交的更改数据。 第二类丢失更新:一个事务覆盖另一个事务已经提交的更新数据。 幻读:一个事务读到另一个事务已提交的新增或已删除数据。 ;为了解决多个事务并发会引发的问题,让用户根据需要在事务的隔离性和并发性之间做合理的权衡,数据库系统提供了四种事务隔离级别供用户选择: Read Uncommitted(读未提交数据):它可以防止第一类丢失更新问题,但没有解决脏读以上的并发问题。它的事务隔离性最低。 Read Committed(读已提交数据):它可以防止脏读以下的并发问题,但没有解决不可重复读以上的并发问题。 Repeatable Read(可重复读):它可以防止不可重复读(包括第二类丢失更新)以下的并发问题,但没有解决幻读问题。 Serializable(串行化):提供最严格的事务隔离性。它把事务隔离成连续的一个接一个地执行,而不是并发执行。在这种隔离级别下,不会出现任何的并发问题。 ; 隔离级别越高,越能保证数据的完整性和一致性,但对并发性能的影响也越大。 对于多数应用,可能优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读,而且具有较好的并发性能。 ;每个数据库连接都有一个全局变量@@tx_isolation表示当前的事务隔离级别。 JDBC

文档评论(0)

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

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

1亿VIP精品文档

相关文档