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 )