[当使用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]
?
改为使用此设置:
Settings settings = new Settings()
.withRenderCatalog(false)
.withRenderMapping(new RenderMapping()
.withCatalogs(new MappedCatalog()
.withInput("MyDatabase")
.withSchemata(new MappedSchema()
.withInput("dbo")
.withOutput("MyDatabase"))));