jOOQ无记录时处理乐观锁的正确方法

问题描述 投票:0回答:1

我想在我的项目中针对并发请求实现乐观锁定。我正在使用 Java 17、Spring 和 jooq。 在阅读文档时,我发现 jOOQ 开箱即用地支持乐观锁定,但我决定自己实现它,因为我不想使用 jooq 记录(我很熟练,而且我真的很喜欢这种编写持久层的方式)。 因此,我使用版本列扩展了表,并且在更新实体时,我检查版本是否不同并增加版本。

主要问题是我不明白如何正确处理异常。更新时,我想了解出了什么问题:我们没有找到实体,或者版本不同。

现在,我的更新方法中有这样的东西:

JdbcTemplate

在这种情况下,我无法理解出了什么问题:没有具有此类 id 的实体,或者版本不同。

我将非常感谢有关如何正确实现此功能的任何建议或指导。

java spring jooq optimistic-locking
1个回答
0
投票

为什么不相关?假设您不只是传递随机 ID,那么您所拥有的 ID 一定已经存在于

在某个时刻

,因此它不再存在的唯一原因是因为有人删除了该记录。因此,这只是乐观锁定应该提高您的 public void update(SomeEntity value) throws SomeException { boolean isUpdated = dsl.update(TABLE_NAME) .set(TABLE_NAME.FIELD1, value.getField1()) .set(TABLE_NAME.LAST_UPDATE, OffsetDateTime.now()) .set(TABLE_NAME.VERSION, TABLE_NAME.VERSION.add(1)) .where(TABLE_NAME.ID.eq(value.getId()) .and(TABLE_NAME.VERSION.eq(value.getVersion()))) .execute() > 0; if (!isUpdated) { throw new SomeException(); } } 的另一种情况,与版本更改时没有太大不同。

    

© www.soinside.com 2019 - 2024. All rights reserved.