Jooq database/schema 名称映射
Jooq database/schema name mapping
我使用 jooq 来针对本地数据库生成对象,但是当 运行稍后在生产中“真实”时,实际数据库将具有不同的名称。为了解决这个问题,我使用 <outputSchemaToDefault>true</outputSchemaToDefault>
配置选项 (maven)。
同时,我们有多个数据库(模式),并且正在使用连接池到服务器,如“jdbc:mysql://localhost:3306/”(没有在此处指定数据库)。
运行ning查询时如何告诉jooq使用哪个数据库?
我已经尝试了所有我能想到的配置:
new Settings()
.withRenderSchema(true) // true/false seems to make no difference.
.withRenderCatalog(true) // true/false seems to make no difference.
.withRenderMapping(new RenderMapping()
.withDefaultSchema("my_database") // Seems to have no effect.
// The above 3 configs always give me an error saying "no database selected".
// Adding this gives me 'my_database.my_table' does not exist - while it actually does.
.withSchemata(new MappedSchema()
.withInputExpression(Pattern.compile(".*"))
.withOutput("my_database")
));
我也试过使用 database/schema 名称,就像不配置 outputSchemaToDefault
一样。但是然后,在上面添加 MappedSchema
代码,但这给了我“'my_databasemy_database.my_table' 不存在”的错误,这是正确的。我不知道为什么该代码两次给我 database/schema 名称?
编辑:
当 jooq 告诉我 db.table 不存在时,如果我在一个好的地方放置一个断点并从 jooq 获取 sql 并且 运行 正是针对我的数据库它确实有效。但是 jooq 没能 运行 它。
此外,我正在使用 jooq 的 3.15.3 版本。
我解决了。它似乎不使用 .withInputExpression(Pattern.compile(".*"))
,而是使用 .withInput("")
。
我仍然不确定它为什么有效,或者这是否是解决它的“正确”方法。但至少这是一个前进的方向。
不知道为什么要使用这个模式,虽然我得到了两次这个名字。但是那个我会单独留下。
我使用 jooq 来针对本地数据库生成对象,但是当 运行稍后在生产中“真实”时,实际数据库将具有不同的名称。为了解决这个问题,我使用 <outputSchemaToDefault>true</outputSchemaToDefault>
配置选项 (maven)。
同时,我们有多个数据库(模式),并且正在使用连接池到服务器,如“jdbc:mysql://localhost:3306/”(没有在此处指定数据库)。
运行ning查询时如何告诉jooq使用哪个数据库?
我已经尝试了所有我能想到的配置:
new Settings()
.withRenderSchema(true) // true/false seems to make no difference.
.withRenderCatalog(true) // true/false seems to make no difference.
.withRenderMapping(new RenderMapping()
.withDefaultSchema("my_database") // Seems to have no effect.
// The above 3 configs always give me an error saying "no database selected".
// Adding this gives me 'my_database.my_table' does not exist - while it actually does.
.withSchemata(new MappedSchema()
.withInputExpression(Pattern.compile(".*"))
.withOutput("my_database")
));
我也试过使用 database/schema 名称,就像不配置 outputSchemaToDefault
一样。但是然后,在上面添加 MappedSchema
代码,但这给了我“'my_databasemy_database.my_table' 不存在”的错误,这是正确的。我不知道为什么该代码两次给我 database/schema 名称?
编辑: 当 jooq 告诉我 db.table 不存在时,如果我在一个好的地方放置一个断点并从 jooq 获取 sql 并且 运行 正是针对我的数据库它确实有效。但是 jooq 没能 运行 它。
此外,我正在使用 jooq 的 3.15.3 版本。
我解决了。它似乎不使用 .withInputExpression(Pattern.compile(".*"))
,而是使用 .withInput("")
。
我仍然不确定它为什么有效,或者这是否是解决它的“正确”方法。但至少这是一个前进的方向。
不知道为什么要使用这个模式,虽然我得到了两次这个名字。但是那个我会单独留下。