Skip to content

The inserted data is lost #1171

@scf18857887860

Description

@scf18857887860

Describe the bug
In my framework, which uses MyBatis-Flex, data is inserted within the same transaction, and the insertion returns successfully. The data can also be queried within the transaction. However, after the request ends, the data is lost when queried in a subsequent request, even though other data within the same transaction remains intact.

To Reproduce
Provide a sample code that reproduces the error.

TransactionManager.execTransaction(() -> {
            try {
                    List<MESPay> addPayList = processMarkingPayBO.getAddPayList();
                    log.info("营销SDK-addPayList,size={}", addPayList.size());
                    if (CollectionUtils.isNotEmpty(addPayList)) {
                        int count = 0;
                        for (MESPay mesPay : addPayList) {
                            count += mesPayDao.create(mesPay);
                        }
                        log.info("营销SDK-addPayList,count={}", count);
                        List<MESPay> mesPays = 
            `mesPayDao.queryByOrderKeyIgnoreLogicDelete(addPayList.get(0).getEdgeOrderKey());`
                        log.info("营销SDK-orderKey,mesPays={}", JSONObject.toJSONString(mesPays));
                    }
                    if (CollectionUtils.isNotEmpty(updatePayList)) {
                        updatePayList.forEach(mesPayDao::update);
                    }
            } catch (Exception e) {
                log.error("error happened.", e);
                throw new BusinessException(ErrorCode.FAILED_ADD_PAY_PAY_EXIST, "保存营销活动失败");
            }
            return 1;
        });
  public class TransactionManager {
      public static <TT> TT execTransaction(Supplier<TT> supplier) {
          boolean needLock = DatabaseHelper.databaseType() == DatabaseType.SQLITE;
  
          if (needLock) {
              synchronized (SynchronizedBaseDao.class) {
                  return Db.txWithResult(supplier);
              }
          } else {
              return Db.txWithResult(supplier);
          }
      }
  }

Expected behavior

The data was inserted successfully, and it can also be queried.​⬤

Logs
image

Environment (please complete the following information):

  • OS: [Windows 7]
  • CPU architecture: [x86_64, intel]
  • sqlite-jdbc version [3.39.3.0]

Additional context

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions