简单阐述下Hibernate中锁机制
Hibernate中的锁机制
A 、乐观锁:
对多用户并发访问持有乐观的态度。
开发步骤:
1 、实体对象(entity)中加入版本属性;
2、 数据库表(table)中加入版本列;
3 、xxx.hbm.xml 中加入<version />标签。
B 、悲观锁:
对多用户并发访问持有悲观观的态度。
数据库中锁得实现:
1、数据库中查询操作加锁:select * from t_account for update;
2、 数据库中插入等操作加锁 insert update delete db 默认加锁。
Hibernate 中锁的实现:
查询操作加锁(设置锁模式):
Account account =(Account) session.get(Account.class, 111,LockMode.UPGRADE);
Account account1 =(Account) session.load(Account.class, 111,LockMode.UPGRADE);
Query query = session.createQuery("from Account as a where a.id = 111 ");
query.setLockMode("a", LockMode.UPGRADE);
Account account = (Account)query.uniqueResult();
Hibernate 锁模式:
LockMode.UPGRADE:
如果别的用户先于我为数据库加锁,等待用户释放锁后,在加锁。
LockMode.UPGRADE_NOWAIT:
如果别的用户先于我为数据库加锁,放弃操作,并抛出异常。
由于本人知识水平有限,总文章中倘若有错误的地方,欢迎批评指证。