hibernate lock

 一  悲观锁与乐观锁:

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

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

 二.锁模式:

     1. LockMode FORCE 

在数据库中强制增加对象的版本,来表明它已经被当前事务修改。相当于JavaPersistence中LockModeType.WRITE,即相当加一个写的锁.(SimiliartoUPGRADEexceptthat,forversionedentities,itresultsinaforcedversionincrement.)

2.LockModeNONE(默认为该值)

别到数据库中去取,除非对象不处于任何高速缓存中,到数据库取对像时不进行加锁.(Nolockrequired.)

    3. LockMode READ

        绕过所有高速缓存,并执行版本检查,来验证内存中的对象是否与当前数据库中存在的版本相同。

(Asharedlock.Objectsinthislockmodewerereadfromthedatabaseinthecurrenttransaction,ratherthanbeingpulledfromacache)

4.LockModeUPGRADE

相当于selectxxxfromxxxxforupdate,利用数据库加了行级锁,不允许其他事物进行DM操作.

5.LockModeUPGRADE_NOWAIT

相当于selectxxxfromxxxforupdatenowait,仅oracle支持该操作.(Attempttoobtainanupgradelock,usinganOracle-styleselectforupdatenowait.)

6.LockModeWRITE

          在执行插入或更新操作时hibernate会自动加上锁.(A WRITE lock is obtained when an object is updated or inserted )

相关推荐