首页 > 解决方案 > 如何在 jooq 查询中获取 springboot 事务的数据

问题描述

所以我在jooq中有一个关于在spring-boot事务中获取数据的问题。我使用事务来保存基础数据,然后我想使用 jooq 来获取这些数据。但是我发现我获取的内容是空的。

    String sql = dslContext.select().from(Tables.SALES_INVENTORY).getSQL();
    System.out.println(sql);
    Result<Record> fetch1 = dslContext.select().from(Tables.SALES_INVENTORY).fetch();
    System.out.println(fetch1);
    String groupbySql =
        dslContext
            .select(Tables.SALES_INVENTORY.ITEM_ID, sum(Tables.SALES_INVENTORY.ON_HAND_QTY))
            .from(Tables.SALES_INVENTORY)
            .groupBy(Tables.SALES_INVENTORY.ITEM_ID)
            .getSQL();
    System.out.println(groupbySql);
    Result<Record2<UUID, BigDecimal>> fetch =
        dslContext
            .select(Tables.SALES_INVENTORY.ITEM_ID, sum(Tables.SALES_INVENTORY.ON_HAND_QTY))
            .from(Tables.SALES_INVENTORY)
            .groupBy(Tables.SALES_INVENTORY.ITEM_ID)
            .fetch();
    System.out.println(fetch);

    List<SalesInventoryEntity> all = salesInventoryRepository.findAll();
    all.forEach(s -> System.out.println(s));

Jooq 的 SQL 是正确的,但无法找到并返回数据,就好像我使用 JPA @Transactional 来执行我的测试方法一样。我使用 jpa-repository 来获取数据,它找到了正确的数据。

所以我的主要问题是如何在 JPA 事务中获取正确的数据?


这是我用来初始化基础数据的内容。它是一个测试方法,它的类是@Transactional,所以这意味着该方法也是@Transactional?

 public void initSalesInventories() {

    List<SalesInventoryEntity> salesInventories = Lists.newArrayList();

    ItemEntity itemEntity = itemRepository.findById(itemId1).get();

    int i = 0;
    for (StockLocationEntity stockLocationEntity : stockLocationEntities) {

      SalesInventoryEntity salesInventoryEntity = new SalesInventoryEntity();
      salesInventoryEntity.setStockLocation(stockLocationEntity);
      salesInventoryEntity.setSalesOrganization(usSalesOrgEntity);
      salesInventoryEntity.setItem(itemEntity);
      salesInventoryEntity.setItemClass(ItemClass.SALEABLE);
      salesInventoryEntity.setOnHandQty(100);
      salesInventoryEntity.setReservedQty(0);
      salesInventoryEntity.setAvailableQty(100);
      salesInventoryEntity.setLeadTime(5);
      DocumentType[] values = DocumentType.values();
      salesInventoryEntity.setDocType(values[i % 7]);
      String code = "TO-201906112010000" + i;
      i++;
      salesInventoryEntity.setDocCode(code);
      salesInventories.add(salesInventoryEntity);
    }

    salesInventoryRepository.saveAll(salesInventories);
  }

初始化我的基础数据后,我使用 jooq 读取数据,但一无所获。我不知道 jooq 是不能读取其他事务的数据还是 jooq 只是从数据库中读取实际数据。如果您对此有所了解,请给我一些建议。

标签: javaspring-bootjpaspring-data-jpajooq

解决方案


推荐阅读