有乐观锁和悲观锁的两种处理方式
乐观锁与悲观锁是对于并发性的限制。锁是具有排他性的。悲观锁,是悲观的认为自己在读取数据的时候别人也在对数据进行读写,所以在自己读写数据的时候对数据进行锁定,直到自己操作完毕。乐观锁正好是相反的,是乐观的认为在自己对数据进行读写的时候不会有其他人对数据进行读写,所以不进行数据库机制的限制,而是进行,版本的限制,而且乐观锁不光光只有版本限制,还有更新时间限制,与字段对比限制。用悲观锁机制制作的软件代表作品是VSS,用乐观锁机制制作的软件代表作品是CVS。
下面我们看看怎么调用悲观锁,我只写一个代码片段,其他地方没有大的改变,如果大家想尝试下结果的话,可以自己写下看看, session.load(User.class,1,LockMode.UPGRADE);通过这句话调用锁机制,如果其他人想要用的话呢,就要一直等到 Transaction commit以后才可以。
乐观锁,乐观锁其实并不是一种锁,而是一种冲突检测机制,他可以随时改变数据,但是在save和update的时候会进行检测,检测版本是否符合标准,如果版本小于等于新版本就不会对数据进行改动,相反还会报错,说是一个脏数据,说明数据有问题,这样也会造成更新丢失。
我们要怎么调用乐观锁呢,相对于悲观锁,乐观锁的调用还是比较麻烦的,我们需要在数据库中加入version,也需要在持久类中加入verison,这个version不用我们进行管理是由hibernate进行管理的。还要在*.hbm.xml中的class标签中配置上
optimistic-lock="verson"这里说明的是这个version不是字段,而是你乐观锁采用哪种机制,这里写成version意思就是采用版本判断这个机制,然后还要在主键id下面配置这个name后面跟的就是数据库中的字段名。