hibernate lock

本文介绍了悲观锁与乐观锁的概念及应用场景。悲观锁通过在查询时加锁防止并发冲突;乐观锁采用版本控制,在工作单元结束时检查版本一致性。此外,还详细解释了多种锁模式及其在数据库中的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一  悲观锁与乐观锁:

      1. 悲观锁:  是在执行查询的时候加上行级锁,类似select * from emp for update,这样其他它的事物则不能在该行上执行DM操作.

      2.乐观锁:   是采用版本控制,在工作单元结束时执行版本检查,如不一致,则抛异常StaleObjectStateException. 

 二.锁模式:

     1. LockMode FORCE 
         在数据库中强制增加对象的版本,来表明它已经被当前事务修改。相当于Java Persistence中LockModeType.WRITE,即相当加一个写的锁.( Similiar to UPGRADE except that, for versioned entities, it results in a forced version increment. )
    2. LockMode NONE (默认为该值)
        别到数据库中去取,除非对象不处于任何高速缓存中, 到数据库取对像时不进行加锁.( No lock required.)
    3. LockMode READ

        绕过所有高速缓存,并执行版本检查,来验证内存中的对象是否与当前数据库中存在的版本相同。
         (A shared lock. Objects in this lock mode were read from the database in the current transaction, rather than being pulled from a cache) 
     4. LockMode UPGRADE 
         相当于 select xxx from xxxx for update ,利用数据库加了行级锁,不允许其他事物进行DM操作.
     5. LockMode UPGRADE_NOWAIT 
         相当于 select xxx from xxx for update nowait ,仅oracle支持该操作.(Attempt to obtain an upgrade lock, using an Oracle-style select for update nowait.  )
     6. LockMode WRITE
          在执行插入或更新操作时hibernate会自动加上锁.(A WRITE lock is obtained when an object is updated or inserted )

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值