hibernate事务管理和锁机制

上传人:206****923 文档编号:41709337 上传时间:2018-05-30 格式:DOC 页数:2 大小:135.50KB
返回 下载 相关 举报
hibernate事务管理和锁机制_第1页
第1页 / 共2页
hibernate事务管理和锁机制_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《hibernate事务管理和锁机制》由会员分享,可在线阅读,更多相关《hibernate事务管理和锁机制(2页珍藏版)》请在金锄头文库上搜索。

1、Hibernate一、一、Hibernate 的事务管理的事务管理Hibernate 是是 JDBC 的轻量级封装,本身并不具备事务管理能力,在事务管理层,的轻量级封装,本身并不具备事务管理能力,在事务管理层,Hibernate 将将其委托给底层的其委托给底层的 JDBC 或者或者 JTA,以实现事务的管理和调度。以实现事务的管理和调度。Hibernate 的默认事务处理机制基于的默认事务处理机制基于 JDBCTransaction,也可以通过配置文件设定采用,也可以通过配置文件设定采用 JTA 作为作为事务管理实现:事务管理实现:net.sf.hibernate.transaction.JT

2、ATransactionFactory1、基于、基于 JDBC 的事务管理的事务管理Hibernate 对于 JDBC 事务的封装非常简单。例如:session=sessionFactory.openSession();Transaction tx= session.beginTransaction();mit();这里要注意的是,在 sessionFactory.openSession()中,Hibernate 会初始化数据库连接,与此同时,将其 AutoCommit 设为关闭状态,这就是说,从 SessionFactory 获得 session,其自动提交属性就已经被关闭了,下面的代码不会

3、对事务性数据库产生任何效果。session=sessionFactory.openSession();session.save(user);session.close();如果要使得代码真正作用到数据库,必须显示的调用 Transaction 指令session=sessionFactory.openSession();Transaction tx = session.beginTransaction();session.save(user);mit();session.close();2、基于、基于 JTA 的事务管理的事务管理JTA 提供了跨 Session 的事务管理能力,这是与 JDB

4、CTransaction 最大的差异。JDBC 事务由 Connection 管理,也就是说,事务管理实际上是在 JDBC Connection 中实现,事务周期限于 Connection 的生命周期之内,对于基于 JDBC Transaction 的 Hibernate 事务管理机制,事务管理在 Session 所依托的 JDBC Connection 中实现,事务周期限于 Session 的生命周期。JTA 事务管理由 JTA 容器实现,JTA 容器对当前加入事务的众多 Connection 进行调度,实现其事务性要求,JTA 的事务周期可横跨多个 JDBC Connection 生命周期

5、,同样,对基于 JTA 事务的Hibernate,JTA 事务横跨多个 Session。需要注意的是,参与 JTA 事务的 Connection 需避免对事务管理进行干涉,如果采用 JTA Transaction,就不应该再调用 Hibernate 的 Transaction 功能。一、锁机制一、锁机制在业务逻辑的实现过程中,往往需要保证数据访问的排他性,给我们选定的目标数据上锁,使其无法在业务逻辑的实现过程中,往往需要保证数据访问的排他性,给我们选定的目标数据上锁,使其无法被其它程序修改。被其它程序修改。Hibernate 支持两种锁机制:悲观锁支持两种锁机制:悲观锁(Pessimistic

6、 Locking)和乐观锁和乐观锁(Optimistic Locking) 。1、悲观锁、悲观锁(Pessimistic Locking)悲观锁悲观锁指的是对数据被外界(包括本系统当前的其它事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定的状态。悲观锁悲观锁的实现,往往依靠数据库提供的锁机制往往依靠数据库提供的锁机制。Hibernate 的加锁模式有:LockMode.NONE : 无锁机制。LockMode.WRITE :Hibernate 在 Insert 和 Update 记录的时候会自动获取。LockMode.READ : Hibernate

7、 在读取记录的时候会自动获取。以上这三种锁机制一般由 Hibernate 内部使用,如 Hibernate 为了保证 Update过程中对象不会被外界修改,会在 save 方法实现中自动为目标对象加上 WRITE 锁。LockMode.UPGRADE :利用数据库的 for update 子句加锁。LockMode. UPGRADE_NOWAIT :Oracle 的特定实现,利用 Oracle 的 forupdate nowait 子句实现加锁。实现:实现:Criteria.setLockModeQuery.setLockModeSession.lock2、乐观锁、乐观锁(Optimistic

8、 Locking)相对悲观锁而言,乐观锁机制采取了更加宽松的机制,乐观锁机制避免了长事务中的数据库加锁开销。相对悲观锁而言,乐观锁机制采取了更加宽松的机制,乐观锁机制避免了长事务中的数据库加锁开销。Hibernate 在其数据访问引擎中内置了乐观锁实现。乐观锁,大多是基于数据版本(在其数据访问引擎中内置了乐观锁实现。乐观锁,大多是基于数据版本(Version)记录机制实现)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号