H2 - READ_UNCOMMITED 事务没有读取另一个事务所做的未提交的更改,为什么?

H2 - READ_UNCOMMITED transaction doesn't read uncommited changes made by another transaction, why?

READ_UNCOMMITED 隔离级别应该有脏读,所以在这种情况下:

Thread1                              Thread2 (READ_UNCOMMITED)
  |                                     |
getAccount(1);                          |          
  |                                     |
updateAccount(account1)                 |                    
  |                                     |
 flush()                                |    
  |                                     |
  |                                   getAccount(1)
  |                                     |
 commitTx()                             |commitTx()
  |_                                    |_

Thread2.getAccount(1) 应该会看到 Thread1 所做的未提交更改,不是吗?

好吧,我没看到,我通过 baDao.findOne(accountId); 获得的帐户看到的是原始数据库值,没有来自 运行 线程 1 的递增值,这有什么解释?

这是Thread1更新账号的地方:

@Transactional(isolation=Isolation.READ_UNCOMMITTED)
@Override
public void addMoneyReadUncommited(int accountId, int ammount) {
    printIsolationLevel();
    BankAccount ba = baDao.findOne(accountId);
    ba.setMoney(ba.getMoney()+ammount);
    baDao.save(ba);
    flushEntityManager();
    logger.info("Money added");
}

我在 logger.info("Money added"); 处停止 Thread1,然后 Thread2 运行:

@Transactional(readOnly=true, isolation=Isolation.READ_UNCOMMITTED)
@Override
public BankAccount getReadUncommited(int accountId){
    printIsolationLevel();
    BankAccount account = baDao.findOne(accountId);
    logger.info("get({}) -> {}",accountId, account);
    return account;
}

问题出在我使用的数据库上。我正在使用 H2 进行测试,由于某些未知原因,第二个线程没有看到未提交的更改。

更改为 MariaDB 后,一切都按预期运行