悲观锁:采用数据库本身的锁机制,for update或no wait
优点:处理并发彻底,并发处理比较好
缺点:当一个用户锁定记录的时候,其它用户都不能使用了,容易造成长时间的等待.
乐观锁:是Hibernate自己实现的,采用版本控制的方式实现处理并发.
1.添加version元素
2.声明使用版本控制的方式实现乐观锁optimistic-lock="version"
你是说session.buildlockrequest(lockoptions.none/read/upgrade).lock(object entity);吗?
这句话整体上的作用是将指定的entity对象放入session对象的persistencecontext(简称pc)中去,打上managed标记。
none和read还有upgrade是三个lockoptions的选项。none表示将entity对象放入pc中的时候不会向数据库发出查询语句;read选项表示将entity对象放入pc中的时候会同时向数据库发出select查询语句;upgrade表示将entity对象放入pc中的时候会向数据库发出select查询语句,而且,还会加上for update语句。
for update语句的作用是在查询的同时将数据锁住,其他人企图改变数据的时候就会进入等待状态,直到加锁的一方完成一次事务操作。我估计你说的锁是指这个吧。