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

问题描述 投票:2回答:1

[当使用JOOQ为SQL Server数据库生成代码时,该生成将创建三部分的限定符,例如:[catalog].[schema].[table]。这正是我在使用SQL Server数据库时想要的,但是在将生成的代码与另一个数据库(例如内存数据库中的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]

jooq
1个回答
0
投票

改为使用此设置:

Settings settings = new Settings()
  .withRenderCatalog(false)
  .withRenderMapping(new RenderMapping()
    .withCatalogs(new MappedCatalog()
      .withInput("MyDatabase")
      .withSchemata(new MappedSchema()
        .withInput("dbo")
        .withOutput("MyDatabase"))));
© www.soinside.com 2019 - 2024. All rights reserved.