欢迎来到天天文库
浏览记录
ID:36302119
大小:2.39 MB
页数:24页
时间:2019-05-08
《hibernate事务处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Hibernate事务处理开源O/R映射框架数据库事务介绍事务的定义事务的ACID属性数据库事务声明通过Hibernate声明JDBC事务通过Hibernate声明JTA事务并发控制多个事务并发引起的问题事务隔离级别在应用程序中解决不可重复读问题乐观锁(OptimisticLocking)悲观锁(PessimisticLocking)Java高端培训2数据库事务的定义事务是指一组相互信赖的操作行为。这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性。数据库事务是对现实生活中事务的模拟,它由一组在业务逻辑上相互信赖的SQL语句组成。示例:银行转
2、帐操作。Java高端培训3数据库事务的ACID属性ACID:原子性(Atomic):指整个数据库事务是不可分割的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发生。一致性(Consistency):一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。隔离性(Isolation):指多个事务同时操作同一数据时,每个事务都有各自的完整数据空间。持久性(Durability):一旦事务完成,事务的结果应该持久化。Java高端培训4数据库事务声明Java高端培训5数据库事务声明数据库系统的客户程序只要向数据库系统声
3、明了一个事务,数据库系统就会自动保证事务的ACID特性。声明事务包含:事务的开始边界:开始事务。事务的正常结束边界:提交事务。事务的异常结束边界:回滚事务。数据库系统支持两种事务模式:自动提交事务(隐式事务):每个SQL语句都是一个独立的事务,当数据库系统执行完一条SQL语句后,会自动提交事务。手工提交事务(显式事务):必须由数据库系统的客户程序显式指定事务开始边界和结束边界。Java高端培训6回顾通过JDBC声明事务Java高端培训7Connectioncon=null;PreparedStatementpstmt=null;try{con=DriverMan
4、ager.getConnection(dbUrl,username,password);//设置手工提交事务模式con.setAutoCommit(false);pstmt=……;pstmt.executeUpdate();//提交事务con.commit();}catch(Exceptione){//事务回滚con.rollback();…..}finally{…….}通过Hibernate声明事务Hibernate本身在设计时并不具备事务处理功能Hibernate只是将底层的JDBCTransaction或者JTATransaction进行了一下封装,在外面
5、套上Transaction和Session的外壳,其实底层都是通过委托底层的JDBC或JTA来实现事务的调度功能。Java高端培训8通过Hibernate声明JDBC事务如果Hibernat持久层运行在一个非托管环境中,可以在hibernate配置文件中指定使用的是JDBC事务。注:如果不进行配置,Hibernate也会默认使用JDBC事务。Java高端培训9org.hibernate.transaction.JDBCTransactionFac
6、toryhibernate.cfg.xmlTransactiontx=null;try{tx=session.beginTransaction();//dosomework...tx.commit();}catch(RuntimeExceptione){if(tx!=null)tx.rollback();throwe;//ordisplayerrormessage}finally{session.close();}注意事项不管事务成功与否,最后都应该调用Session的close()方法来关闭Sessio
7、n。即使事务中只包含只读操作,也应该在事务执行成功后提交事务,并且在事务执行失败时撤销事务。因为在提交或撤销事务时,数据库会释放事务所占用的资源,有利于提高数据库的运行性能。一个Session可以包含多个Transaction实例,也就是说,一个Session可以对应多个事务。如果在执行Session的一个事务时出现了异常,就必须立即关闭这个Session,不能再利用这个Session来执行其他的事务。Java高端培训10通过Hibernate声明JTA事务Hibernat持久层运行在一个托管环境中,可以使用JTAJava高端培训118、ry>
8、ry>
此文档下载收益归作者所有