hibernate隔离级别,悲观和乐观的关系
他们是相辅相成的关系?还是悲观锁数据库底层隔离用的是隔离级别?也或者是悲观和乐观只是为了防止数据被修改?
通常情况下是怎么用的.谢谢
------解决方案--------------------
数据库隔离级别和悲观乐观锁都是数据库的概念,而不是hibernate的概念
悲观乐观是对数据库锁的分类的概念,根据其他概念,还有表级锁,行级锁等
隔离级别是用来解决脏读,不可重复读等问题的手段,它用了数据库锁来实现
------解决方案--------------------
楼上观点不完全正确
ansi事务的隔离级别有4中
1、read uncommitted读取未提交
2、read committed 读取提交
3、repeatable read 允许重复读
4、serializable 序列化
在你的应用系统中你可以自己选择,但是对于 读取未提交 这种隔离级别是很危险的。怎么危险就不议论了。
而serializable 在大多数程序中不需要(幻读通常不是问题)
这样可选的隔离级别就剩下read committed 读取提交 和 repeatable read 允许重复读了,由你确定。你可以通过hibernate.connection.isolation = 4来设置。
乐观锁始终认为一切很美好。这种方法保证了最佳性能和可伸缩性,默认会使用这种策略,但会出现二次丢失更新默认或使用最晚提交生效策略解决。
悲观锁可以通过是更高的隔离级别,通常使用是
session.lock(object,LockMode.UPGRADE);
来显示锁定对象
通常不是吧所有数据库事务转换为一个更高的、不可伸缩的隔离性级别,而是在必要时在hibernate的session中如上设置。以获取更强的隔离性保证。