我想在我的项目中针对并发请求实现乐观锁定。我正在使用 Java 17、Spring 和 jooq。 在阅读文档时,我发现 jOOQ 开箱即用地支持乐观锁定,但我决定自己实现它,因为我不想使用 jooq 记录(我很熟练,而且我真的很喜欢这种编写持久层的方式)。 因此,我使用版本列扩展了表,并且在更新实体时,我检查版本是否不同并增加版本。
主要问题是我不明白如何正确处理异常。更新时,我想了解出了什么问题:我们没有找到实体,或者版本不同。现在,我的更新方法中有这样的东西:
JdbcTemplate
在这种情况下,我无法理解出了什么问题:没有具有此类 id 的实体,或者版本不同。
我将非常感谢有关如何正确实现此功能的任何建议或指导。
为什么不相关?假设您不只是传递随机 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();
}
}
的另一种情况,与版本更改时没有太大不同。