如何使用 JOOQ 在运行时重写 table 限定符

How to rewrite the table qualifier at runtime with JOOQ

当使用 JOOQ 为 SQL 服务器数据库生成代码时,生成会创建由三部分组成的限定符,例如:[catalog].[schema].[table]。这正是我在使用 SQL 服务器数据库时想要的,但是在将生成的代码与另一个数据库(如内存中的 H2 数据库)一起用于单元测试时会出现问题。

H2 方言不支持这些由三部分组成的限定符,H2 需要类似 [catalog].[table] 的东西。这会在针对 H2 执行如下命令时导致语法错误:

context.createTable(TBLBUSINESSENTITY).columns(TBLBUSINESSENTITY.fields()).execute();

为了解决这个问题,我需要在运行时更改限定符,我认为这可以使用渲染映射和映射模式来完成。不幸的是,这似乎只能像这样修改限定符的模式部分:

Settings settings = new Settings().withRenderMapping(new RenderMapping().withSchemata(
      new MappedSchema().withInput("dbo").withOutput("mySchema")));

给定限定符 [MyDatabase].[dbo].[MyTable],这映射到 [MyDatabase].[mySchema].[MyTable],但我不知道如何完全删除该部分。

有什么方法可以将映射重写为 [MyDatabase].[MyTable]

改为使用此设置:

Settings settings = new Settings()
  .withRenderCatalog(false)
  .withRenderMapping(new RenderMapping()
    .withCatalogs(new MappedCatalog()
      .withInput("MyDatabase")
      .withSchemata(new MappedSchema()
        .withInput("dbo")
        .withOutput("MyDatabase"))));