所谓悲观锁和乐观锁都是为了解决并发问题而提供的一种锁机制。
1、悲观锁
悲观锁对事务并发问题持悲观态度,认为一定会出问题,所以从加载数据就开始锁定,直到事务提交。期间其他事务不能对数据进行操作。 通过数据库本身的机制来实现。即设置事务隔离级别为串行化。
2、乐观锁
由于悲观锁并发处理能力太差,hibernate提供了乐观锁机制。对数据的并发问题持乐观态度,认定事务出现异常操作是可以接受的。通常是在表中添加版本号或时间戳字段来实现。每次事务开启时,会去获取到数据的版本号,在事务提交时,再去获取数据的版本号,当两个版本号一致时,事务提交,并将版本号增加1。如果不一致,说明在这期间有其他事务操作了该数据,那么事务回滚,放弃操作。