Mysql 如何使用Hibernate查询语言实现行级锁定?

Mysql 如何使用Hibernate查询语言实现行级锁定?,mysql,database,hibernate,locking,Mysql,Database,Hibernate,Locking,背景:我正在处理一个MYSql数据库,其中多个实例从同一个帐户表读取数据。我想使用Hibernate查询语言实现行级独占锁,以避免脏读 我的代码如下 List<AccountTableBean> currentRequestslist = sessionFactory.getCurrentSession() .createQuery("from Account where status = :finalStatus")

背景:我正在处理一个MYSql数据库,其中多个实例从同一个帐户表读取数据。我想使用Hibernate查询语言实现行级独占锁,以避免脏读

我的代码如下

List<AccountTableBean> currentRequestslist = sessionFactory.getCurrentSession()
                .createQuery("from Account where status = :finalStatus")
                .setLockMode("MappCurrentRequests", LockMode.PESSIMISTIC_READ)
                .setParameter("finalStatus","Active").list();   
List currentRequestslist=sessionFactory.getCurrentSession()
.createQuery(“来自状态为:finalStatus的帐户”)
.setLockMode(“MappCurrentRequests”,LockMode.悲观读取)
.setParameter(“finalStatus”,“Active”).list();
目前,我在整张表上都使用了悲观的读数。是否有一种方法可以应用于锁定单个行?任何例子都会很有帮助

谢谢,,
Gendaful

锁定类型由数据库本身暗示

如果您使用的是MyISAM存储引擎,那么无论您在原始SQL或JDBC中如何努力,都无法强制执行行级锁定。MyISAM根本不支持行级锁

只需切换到使用InnoDB,您甚至不必调用
setLockMode
来获得必要的锁类型

从:

MySQL对InnoDB表使用行级锁定来支持同步 通过多个会话进行写访问,使其适合 多用户、高并发和OLTP应用程序。MySQL使用 MyISAM、内存和合并表的表级锁定,允许 一次只需一个会话来更新这些表,从而使它们更容易更新 适用于只读、多读或单用户应用程序