Mysql 如何使用Hibernate查询语言实现行级锁定?
背景:我正在处理一个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")
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、内存和合并表的表级锁定,允许
一次只需一个会话来更新这些表,从而使它们更容易更新
适用于只读、多读或单用户应用程序