确保更新发生在 Hibernate/HSQLDB 中的并发锁定?

Posted

技术标签:

【中文标题】确保更新发生在 Hibernate/HSQLDB 中的并发锁定?【英文标题】:Ensure update happens with concurrent locking in Hibernate/HSQLDB? 【发布时间】:2012-06-01 04:05:08 【问题描述】:

我有多台机器运行一项服务,该服务正在使用 Hibernate 从数据库中更新和读取值。

每当我需要更新我的服务中的数据库值时,我都会使用升级 nowait 锁,如果我无法获得锁,我只是稍后重试。

void lock(Job job) 
    sessionFactory.session.lock(job, LockMode.UPGRADE_NOWAIT);

在我的服务中有一个地方我必须更新那里的数据库值,并且我无法重试。我想我会在这些地方使用普通的升级锁,它可以等待更新值所需的时间。

void waitForLock(Job job) 
    sessionFactory.session.lock(job, LockMode.UPGRADE);

但现在我有时会看到此错误弹出...

org.hibernate.dialect.HSQLDialect - HSQLDB supports only READ_UNCOMMITTED isolation

有没有办法保证这个值在第一次使用 Hibernate 时会更新?

【问题讨论】:

【参考方案1】:

您使用的是旧版本的 HSQLDB,它不支持事务隔离。使用最新版本(2.2.8 或更高版本)即可。

【讨论】:

以上是关于确保更新发生在 Hibernate/HSQLDB 中的并发锁定?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate/hsqldb 2 无法水合 Blob 列

使用本机 SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为啥?

Hibernate HSQLDB 两个会话

JPA/Hibernate/HSQLDB 查询但不分配子对象

hibernate/hsqldb:关机后找不到数据库文件

JPA Hibernate HSQLDB - VARBINARY() 字段和错误尝试选择