Java Hibernate:按顺序获取行的最佳方法

Java Hibernate:按顺序获取行的最佳方法,java,oracle,hibernate,Java,Oracle,Hibernate,我有一个简单的问题。我有一个带有一些数据和序列号的DB表。和几个指向数据库的节点 我需要每个节点来保证这个节点,并且只有这个节点在这个时刻选择一个序列号最小的行 在hibernate中执行此操作的最佳方法是什么 我做的第一件事是使用UPGRADE NOWAIT子句执行查询,然后尝试更新行。否则,如果捕获锁捕获异常,请超时重试 while (retryCount < MAX_RETRY_ATTEMPTS) { try { Object obj = session().get(

我有一个简单的问题。我有一个带有一些数据和序列号的DB表。和几个指向数据库的节点

我需要每个节点来保证这个节点,并且只有这个节点在这个时刻选择一个序列号最小的行

在hibernate中执行此操作的最佳方法是什么

我做的第一件事是使用
UPGRADE NOWAIT
子句执行查询,然后尝试更新行。否则,如果捕获锁捕获异常,请超时重试

while (retryCount < MAX_RETRY_ATTEMPTS) {
  try {
      Object obj = session().get(MyObject.class, stringId, LockMode.UPGRADE_NOWAIT);
      //Acquire this row somehow
  } catch (LockAcquisitionException | OptimisticLockException | StaleObjectStateException  e) {
      retryCount = handleException(retryCount, e);
  }
}
while(重试次数
但是这种方法很容易出错——我应该重试多少次,间隔多长时间?
我宁愿找到更好的方法保证顺序锁。但是我不知道怎么做。

考虑使用LockMode.eposmistic\u FORCE\u INCREMENT,并通过事务提交释放锁。

问题-调用session.flush()时会释放锁吗,还是在退出@Transactional method后释放锁?只有在提交后才会释放锁。flush()主要批量使用,不会释放锁。