jOOQ - 将模式名称添加到所有表
jOOQ - add schema name to all tables
我正在使用 jOOQ 3.5.4 进行代码生成和查询生成以及 Azure SQL 数据库。有没有办法在所有查询中(在运行时)或在代码生成过程中在 table 名称前加上架构名称?我目前只有一个模式(我们称之为 myschema)和一些 tables(我们称其中之一为 mytable)。目前,当 jOOQ 创建它产生的查询时:
select * from mytable;
这无法与 Azure SQL 一起使用,因为它需要查询中的架构名称,如下所示:
select * from myschema.mytable;
虽然运行时模式映射不是为此目的创建的,但我也试过了:
http://www.jooq.org/doc/3.5/manual/sql-building/dsl-context/runtime-schema-mapping/
通过给予
Settings settings = new Settings()
.withRenderMapping(new RenderMapping()
.withSchemata(
new MappedSchema().withInput("myschema")
.withOutput("myschema")));
这似乎不起作用。
我还尝试在代码生成器使用的 xml 中添加模式名称,如
中给出
http://www.jooq.org/doc/3.5/manual/code-generation/codegen-advanced/
这是我的 xml 的样子:
<database>
.....
<inputSchema>myschema</inputSchema>
<outputSchema>myschema</outputSchema>
<schemata>
<schema>
<inputSchema>myschema</inputSchema>
<outputSchema>myschema</outputSchema>
</schema>
</schemata>
</database>
这也没有帮助。有什么建议吗?
尝试settings.withRenderSchema(true)
。如果你只有一个模式,jOOQ 会优化它,因为大多数数据库都可以处理这种情况。
请注意,代码生成器中使用的架构与您的情况基本无关。该映射用于将您无法控制的一些奇怪名称转换为有用的名称(例如 FQ475
转换为 MASTER
)。 jOOQ 将此名称放入代码中。然后,您可以使用 RenderMapping
将此内部名称转换为目标数据库使用的架构名称。
如果这不起作用,请在以下代码中的 getSQL(true)
上设置断点:
Configuration config = new DefaultConfiguration();
config.set(new Settings().withRenderSchema(true));
DSL.using(config)
.selectFrom(MYTABLE)
.getSQL(true);
这应该能让您看到 column/table 名称的呈现位置以及为什么它不是您所期望的。
当你发现这个错误时,我建议添加一个最小的单元测试,它展示了如何配置 jOOQ 以使其正确。这样,当问题再次出现时,您可以将实际设置与您可以证明有效的设置进行比较。
我正在使用 jOOQ 3.5.4 进行代码生成和查询生成以及 Azure SQL 数据库。有没有办法在所有查询中(在运行时)或在代码生成过程中在 table 名称前加上架构名称?我目前只有一个模式(我们称之为 myschema)和一些 tables(我们称其中之一为 mytable)。目前,当 jOOQ 创建它产生的查询时:
select * from mytable;
这无法与 Azure SQL 一起使用,因为它需要查询中的架构名称,如下所示:
select * from myschema.mytable;
虽然运行时模式映射不是为此目的创建的,但我也试过了:
http://www.jooq.org/doc/3.5/manual/sql-building/dsl-context/runtime-schema-mapping/
通过给予
Settings settings = new Settings()
.withRenderMapping(new RenderMapping()
.withSchemata(
new MappedSchema().withInput("myschema")
.withOutput("myschema")));
这似乎不起作用。
我还尝试在代码生成器使用的 xml 中添加模式名称,如
中给出http://www.jooq.org/doc/3.5/manual/code-generation/codegen-advanced/
这是我的 xml 的样子:
<database>
.....
<inputSchema>myschema</inputSchema>
<outputSchema>myschema</outputSchema>
<schemata>
<schema>
<inputSchema>myschema</inputSchema>
<outputSchema>myschema</outputSchema>
</schema>
</schemata>
</database>
这也没有帮助。有什么建议吗?
尝试settings.withRenderSchema(true)
。如果你只有一个模式,jOOQ 会优化它,因为大多数数据库都可以处理这种情况。
请注意,代码生成器中使用的架构与您的情况基本无关。该映射用于将您无法控制的一些奇怪名称转换为有用的名称(例如 FQ475
转换为 MASTER
)。 jOOQ 将此名称放入代码中。然后,您可以使用 RenderMapping
将此内部名称转换为目标数据库使用的架构名称。
如果这不起作用,请在以下代码中的 getSQL(true)
上设置断点:
Configuration config = new DefaultConfiguration();
config.set(new Settings().withRenderSchema(true));
DSL.using(config)
.selectFrom(MYTABLE)
.getSQL(true);
这应该能让您看到 column/table 名称的呈现位置以及为什么它不是您所期望的。
当你发现这个错误时,我建议添加一个最小的单元测试,它展示了如何配置 jOOQ 以使其正确。这样,当问题再次出现时,您可以将实际设置与您可以证明有效的设置进行比较。