Hibernate 悲观锁和乐观锁

来源:互联网 发布:积分月结数据库设计 编辑:程序博客网 时间:2024/05/18 08:15
悲观锁:认为在修改数据库数据的这段时间里存在着也想修改此数据的事务!
乐观锁:认为在短暂的时间里不会有事务来修改此数据库的数据!

悲观锁:
基于jdbc实现的数据库加锁如下:
     select * from account where name="Erica" for update.在更新的过程中,数据库处于加锁状态,任何其他的针对本条数据的操作都将被延迟。本次事务提交后解锁。
hibernate悲观锁的具体实现如下:
     String sql="查询语句";
     Query query=session.createQuery(sql);
     query.setLockMode("对象",LockModel.UPGRADE);

     说到这里,就提到了hiernate的加锁模式:
     LockMode.NONE : 无锁机制。
     LockMode.WRITE :Hibernate在Insert和Update记录的时候会自动获取。
     LockMode.READ : Hibernate在读取记录的时候会自动获取。
     这三种加锁模式是供hibernate内部使用的,与数据库加锁无关
     LockMode.UPGRADE:利用数据库的for update字句加锁。

乐观锁:
最常用的方法就是在数据库中加入一个VERSON栏记录,在读取数据时连同版本号一同读取,并在更新数据时递增版本号,然后比对版本号与数据库中的版本号,如果大于数据库中的版本号则予以更新,否则就回报错误。
原创粉丝点击