他们是相辅相成的关系?还是悲观锁数据库底层隔离用的是隔离级别?也或者是悲观和乐观只是为了防止数据被修改?
通常情况下是怎么用的.谢谢

解决方案 »

  1.   

    数据库隔离级别和悲观乐观锁都是数据库的概念,而不是hibernate的概念
    悲观乐观是对数据库锁的分类的概念,根据其他概念,还有表级锁,行级锁等
    隔离级别是用来解决脏读,不可重复读等问题的手段,它用了数据库锁来实现
      

  2.   

    楼上观点不完全正确
    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中如上设置。以获取更强的隔离性保证。