悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
乐观锁:假设并发不会发生冲突,只在提交操作时检查是否违反数据完整性。乐观锁不能解决脏读的问题。
hibernate对于乐观锁的实现:在会产生冲突的字段加上annotation @version,hibernate在更新时自动检查该字段
hibernate对于悲观锁的实现:查询的时候加上updlock选项,但是会严重影响性能,对于其它更新用户会产生阻塞。
结论:对于并发不大且不允许脏读的应用,可以使用悲观锁,对于并发量非常大的应用可以采用乐观锁的机制。