Hibernate中的锁是什么意思

Hibernate中的锁是什么意思,第1张

你是说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语句的作用是在查询的同时将数据锁住,其他人企图改变数据的时候就会进入等待状态,直到加锁的一方完成一次事务 *** 作。我估计你说的锁是指这个吧。

mysql数据库死锁解决方法如下:

1、对于按钮等控件,点击后使其立刻失效,不让用户重复点击,避免对同时对同一条记录 *** 作。

2、使用乐观锁进行控制。乐观锁大多是基于数据版本(Version)记录机制实现。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是 通过为数据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数 据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。乐观锁机制避免了长事务中的数据 库加锁开销(用户A和用户B *** 作过程中,都没有对数据库数据加锁),大大提升了大并发量下的系统整体性能表现。Hibernate 在其数据访问引擎中内置了乐观锁实现。需要注意的是,由于乐观锁机制是在系统中实现,来自外部系统的用户更新 *** 作不受系统的控制,因此可能会造 成脏数据被更新到数据库中。

乐观锁是一种程序实现,无论用不用hibernate都能实现,与sql和数据库都没有关系。

悲观锁由sql语句for update标识触发,是由数据库支持的,也与hibernate自有技术无关。

hibernate提供了对悲观锁的支持,是通过设定参数实现的,本质是为了变更最终发出去的sql写法,和用不用hql没有关系。

如果想不明白,还是再去认真了解一下乐观锁和悲观锁吧


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9991175.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存