gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:16:16 25 4
gpt4 key购买 nike

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

我的代码如下。

List<AccountTableBean> currentRequestslist = sessionFactory.getCurrentSession()
.createQuery("from Account where status = :finalStatus")
.setLockMode("MappCurrentRequests", LockMode.PESSIMISTIC_READ)
.setParameter("finalStatus","Active").list();

目前,我已经对整个表使用了Pessimistic_read。有没有办法可以申请锁定个别行?任何示例都会非常有帮助。

谢谢,有情有义

最佳答案

锁定类型由数据库本身隐含。

如果您使用的是 MyISAM 存储引擎,则无论您多么努力地尝试,都无法强制执行行级锁定 - 无论是在原始 SQL 中还是在 JDBC 中。 MyISAM 根本不支持行级锁。

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

来自manual :

MySQL uses row-level locking for InnoDB tables to support simultaneous write access by multiple sessions, making them suitable for multi-user, highly concurrent, and OLTP applications. MySQL uses table-level locking for MyISAM, MEMORY, and MERGE tables, allowing only one session to update those tables at a time, making them more suitable for read-only, read-mostly, or single-user applications.

关于mysql - 如何使用 Hibernate 查询语言实现行级锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com