java - SQL Server 独占行锁 (XLOCK ROWLOCK) 使用 Spring Transactions 使用 Hibernate

标签 java sql-server hibernate spring transactions

我正在尝试对行进行选择并更新值。当我这样做时,我需要对该行的独占访问权限。换句话说,在我更新该行之前,任何其他进程(虚拟机内部或外部)都应该能够读取该行。当前值不应该是“可选择的”。我尝试过以下事务注释。

@Transactional(isolation = Isolation.SERIALIZABLE, readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class, timeout=960)

这在 Spring 上下文中肯定有效,但是当在事务中间放置 sleep 语句时,我仍然可以使用数据库工具选择当前行值。

有没有办法使用 Spring/Hibernate 获取 XLOCK/ROWLOCK(无论哪个合适)?

版本:

  • Spring :3.0.5.RELEASE
  • hibernate :3.6.3.最终版
  • JTDS:1.2.4

如果我无法使用 Spring/Hibernate,非常感谢 JTDS 示例的链接。

谢谢。

最佳答案

SERIALIZABLE 隔离级别允许其他事务读取数据,但不允许修改。因此,您需要显式SELECT ... FOR UPDATE(在 Hibernate 中:Query#setLockMode(LockMode.UPGRADE))。

关于java - SQL Server 独占行锁 (XLOCK ROWLOCK) 使用 Spring Transactions 使用 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822475/

相关文章:

sql-server - AzureDevOps 管道和 sqlpackage

java - Java/Hibernate Criteria Query API 是否可以防止注入(inject)?

java - 如何将 ZonedDateTime 舍入为持续时间

java - 如何在 TALEND 的 tMap 中添加自定义 JAVA 代码

java - 为什么第 4 行不生成未经检查的异常?

mysql - 如何将SQL Server 数据库迁移到MySQL?

java - 无效的 XML 字符 (Unicode : 0x3) was found in the element content of the document in selenium

sql - 为什么 JSON 导入表显示所有空值?

java - 支持 JPA 的企业应用程序的 Spring 和 Hibernate 对业务有何帮助?

java - 用于更新对象的 Spring REST API 方法不会检索现有的子对象