Java 如何使DB为后续事务返回不同的行?

Java 如何使DB为后续事务返回不同的行?,java,mysql,database,hibernate,Java,Mysql,Database,Hibernate,我在多线程环境中有以下流程 启动事务 从数据库中读取n个顶部行(基于列) 检查一些标准 更新这些行集 提交/回滚事务 我使用乐观锁定来处理多线程场景,但在上述情况下,DB总是返回相同的行集,因此如果第二个线程同时运行,它将始终失败 有没有更好的方法来处理这个问题? 我们可以使用一些选项强制DB为每个事务返回不同的行集吗?您为所有线程获得相同的topn记录的原因是因为中的I(原子性、一致性、隔离性、持久性)事务原则。隔离意味着其他操作无法访问在尚未完成的事务期间修改的数据。因此,在您的线程提交其事

我在多线程环境中有以下流程

  • 启动事务
  • 从数据库中读取n个顶部行(基于列)
  • 检查一些标准
  • 更新这些行集
  • 提交/回滚事务
  • 我使用乐观锁定来处理多线程场景,但在上述情况下,DB总是返回相同的行集,因此如果第二个线程同时运行,它将始终失败

    有没有更好的方法来处理这个问题?
    我们可以使用一些选项强制DB为每个事务返回不同的行集吗?

    您为所有线程获得相同的top
    n
    记录的原因是因为中的I(原子性、一致性、隔离性、持久性)事务原则。隔离意味着其他操作无法访问在尚未完成的事务期间修改的数据。因此,在您的线程提交其事务之前,其他线程无法看到它们所做的事情

    可以将大多数数据库上的更改为以下选项之一:

    • 可序列化
    • 可重复读取
    • 阅读承诺
    • 读未提交
    在您的情况下,您可能希望readuncommitted,因为它允许一个事务看到其他事务所做的未提交更改


    注意:对于大多数应用来说,这几乎肯定是错误的隔离级别,并且可能导致数据损坏。如果您在此处描述的应用程序以外的其他应用程序正在访问同一数据库,您可能不想更改隔离级别,因为这些应用程序可能会开始看到意外和不正确的行为。

    没有其他方法吗?