Hibernate的悲观锁和乐观锁
1.Student
s=sess,get(Student.clsss,id,LockMode.UPGRADE);
五中模式:
LockMode.NONE: 查询时先在cache(缓存)里找,如果没有,在到db里加载无锁机制。
LockMode.READ: 不管cache有没有,都查询数据库,Hibernate在读取记录的时候会自动获取。
LockMOde.UPGRADE:不管cache有没有,都查询数据库,并且对查询的数据加锁,如果锁被其他事务拿走,当前事务会一直等到加上锁为止。利用数据库的for update子句加锁。
LockMode.UPGRADE_NOWAIT:不管cache有没有,都查询数据库,并且对查询的数据加锁,如果锁被其他事务拿走,当前事务加锁。
LockMode.WRITEE: 在做insert ,update delete会自动使用模式,内部使用。
2 以下情况用悲观锁:查询数据时,就给数据加锁。
1)数据资源被多个事务并发访问的机会很大
2)修改数据所需时间非常短
乐观锁,大多是基于数据版本(Version)记录机制实现:
1. 在javaBean中实现加上version的属性提供set和get方法
2. 在数据库表上加上version列。
3. 在映射文件的
后加上<version><version name="version" column="version" />实现原理:读取处数据时,将此版本号一同读出,之后更新时,将此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行对比,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。