Hibernate事务处理.ppt
《Hibernate事务处理.ppt》由会员分享,可在线阅读,更多相关《Hibernate事务处理.ppt(24页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、开源O/R映射框架v数据库事务介绍数据库事务介绍事务的定义事务的ACID属性v数据库事务声明数据库事务声明通过Hibernate声明JDBC事务通过Hibernate声明JTA事务v并发控制并发控制多个事务并发引起的问题事务隔离级别在应用程序中解决不可重复读问题乐观锁(Optimistic Locking)悲观锁(Pessimistic Locking)Java高端培训2事务是指一组相互信赖的操作行为。这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性。数据库事务是对现实生活中事务的模拟,它由一组在业务逻辑上相互信赖的SQL语句组成。示例:银行转帐操作。Java高端培训3A
2、CID:原子性(Atomic):指整个数据库事务是不可分割的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发生。一致性(Consistency):一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。隔离性(Isolation):指多个事务同时操作同一数据时,每个事务都有各自的完整数据空间。持久性(Durability):一旦事务完成,事务的结果应该持久化。Java高端培训4v数据库事务声明数据库事务声明Java高端培训5数据库系统的客户程序只要向数据库系统声明了一个事务,数据库系统就会自动保证事务的ACID特性。声明事务包含:事务的开始边
3、界:开始事务。事务的正常结束边界:提交事务。事务的异常结束边界:回滚事务。数据库系统支持两种事务模式:自动提交事务(隐式事务):每个SQL语句都是一个独立的事务,当数据库系统执行完一条SQL语句后,会自动提交事务。手工提交事务(显式事务):必须由数据库系统的客户程序显式指定事务开始边界和结束边界。Java高端培训6Java高端培训7Connection con=null;PreparedStatement pstmt=null;try con=DriverManager.getConnection(dbUrl,username,password);/设置手工提交事务模式 con.setAuto
4、Commit(false);pstmt=;pstmt.executeUpdate();/提交事务 mit();catch(Exception e)/事务回滚 con.rollback();.finally .Hibernate本身在设计时并不具备事务处理功能Hibernate只是将底层的JDBCTransaction或者JTATransaction进行了一下封装,在外面套上Transaction和Session的外壳,其实底层都是通过委托底层的JDBC或JTA来实现事务的调度功能。Java高端培训8如果Hibernat持久层运行在一个非托管环境中,可以在hibernate配置文件中指定使用的是
5、JDBC事务。注:如果不进行配置,Hibernate也会默认使用JDBC事务。Java高端培训9 org.hibernate.transaction.JDBCTransactionFactory hibernate.cfg.xmlTransaction tx=null;try tx=session.beginTransaction();/do some mit();catch(RuntimeException e)if(tx!=null)tx.rollback();throw e;/or display error messagefinally session.close();不管事务成功与否
6、,最后都应该调用Session的close()方法来关闭Session。即使事务中只包含只读操作,也应该在事务执行成功后提交事务,并且在事务执行失败时撤销事务。因为在提交或撤销事务时,数据库会释放事务所占用的资源,有利于提高数据库的运行性能。一个Session可以包含多个Transaction实例,也就是说,一个Session可以对应多个事务。如果在执行Session的一个事务时出现了异常,就必须立即关闭这个Session,不能再利用这个Session来执行其他的事务。Java高端培训10Hibernat持久层运行在一个托管环境中,可以使用JTAJava高端培训11 org.hibernate
7、.transaction.JTATransactionFactory /BMT(bean管理事务)UserTransaction tx=null;try tx=(UserTransaction)new InitialContext().lookup(java:comp/UserTransaction);tx.begin();/Do some work on Session bound to transaction factory.getCurrentSession().persist(.);mit();catch(RuntimeException e)tx.rollback();throw e
8、;/or display error messagehibernate.cfg.xml注:在CMT(容器管理事务)方式下,事务声明是在session bean的部署描述符中,而不需要编程。v并发控制并发控制多个事务并发引起的问题事务隔离级别在应用程序中解决不可重复读问题乐观锁(Optimistic Locking)悲观锁(Pessimistic Locking)Java高端培训12多个事务同时访问数据库中相同的数据时,如果没有采取必要的隔离机制,就可能会发生如下并发问题:第一类丢失更新:撤消一个事务时,把其它事务已提交的更新数据也撤消了。脏读:一个事务读到另一个事务未提交的更新数据。不可重复读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 事务处理
限制150内