gpt4 book ai didi

java - 是否有使用 Hibernate/Spring Data JPA 处理乐观锁定的通用方法?

转载 作者:行者123 更新时间:2023-12-02 01:23:40 26 4
gpt4 key购买 nike

我正在使用 hibernate 的 @Version 注释进行乐观锁定。我在数据库中更新某些内容的通常用例如下所示:

  1. 打开交易(使用@Transactional)
  2. 选择我需要更改的实体
  3. 检查我是否可以进行所需的更改(验证步骤)
  4. 进行更改
  5. 保存所有内容(Spring Data JPA 存储库 save() 方法),提交事务
  6. 如果我捕获任何 OptimisticLockException,那么我必须重试第 1 步中的所有内容(直到成功保存或验证步骤失败,且不超过 X 次)

对于任何类型的乐观锁定处理来说,该算法看起来都很常见。是否有使用 hibernate 或 spring data jpa 进行这些重试/处理乐观锁定失败的通用方法,或者我应该自己编写这样的方法?我的意思是(但不是字面意思):

boolean trySaveUntilDoneOrNotOptimisticLockingExceptionOccur(Runnable codeWhichSelectsValidatesUpdatesAndSavesDataButWithoutOptimisticLockingProcessing, int maxOptimisticLockingRetries)

最佳答案

由于问题被标记为spring-data-jpa,我将从Spring世界回答。

看看@Retryable。我发现它对于您描述的完全相同的用例非常有用。这是我通常的模式:

@Service
@Transactional
@Retryable(maxAttempts = 7,
backoff = @Backoff(delay = 50),
include = { TransientDataAccessException.class,
RecoverableDataAccessException.class }
)
public class MyService {

// all methods in this service are now transactional and automatically retried.

}

当然,您可以使用退避选项。

查看here有关 @Retryable 的更多示例。

关于java - 是否有使用 Hibernate/Spring Data JPA 处理乐观锁定的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57280154/

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