java - 我应该为读语句使用哪种事务隔离级别?

标签 java mysql hibernate jpa transactions

我需要在新插入的行中使用 city_id 列的 MAX 值加一来插入一条新记录。因此,如果 MAX 值为 14,则下一个插入行的 city_id 列值应为 15。

在我的代码中,我将获取 city_id 列的最大值,递增它,然后保存它。我正在为该代码使用 spring 事务。

  private void saveCityDetail(final CityBO googleCityBO) {
    if (googleCityBO.getId() == null) {
      final Long cityId = cityMasterRepository.findMaxCityId();
      googleCityBO.setCityId(cityId + 1);
      googleCityBO.setActive(true);
    }
    cityMasterRepository.save(cityEntityBOMapper.convertCityBOToCityEntity(googleCityBO));
  }

我想知道应该使用隔离级别,以便事务可以读取最大计数并获取读锁,以便其他事务应该等待该事务完成。

最佳答案

SERIALIZABLE 是唯一保证“其他事务应该等待此事务完成”的方法。

如果事务中执行的唯一操作是读取一行并更新同一行,则不会发生死锁,并且不需要正常的重试循环。

关于java - 我应该为读语句使用哪种事务隔离级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57419805/

相关文章:

java - 即时时间戳与 Spring Boot 3 结合 PostgreSQL 失败

Java 一次多次替换

php - 查询在游戏数据库中查找用户排名

java - SimpleDateFormat 解析不能正常工作

Mysql 比较单个表中同一行中两列的值

Mysql 插入时触发错误

java - 如何在 Hibernate Java obj 中添加 @XmlTransient

mysql - 如何使用 Hibernate 和 log4j 只记录插入和更新?

java - 执行gradle任务以测试,执行connectedAndroidTest,构建和执行GRADLE中的脚本

java - Android-如何在服务和命令行之间进行通信