Jooq数据库/模式名称映射



我使用jooq根据本地数据库生成对象,但是在运行" for real "时在以后的生产中,实际的数据库将有不同的名称。为了解决这个问题,我使用<outputSchemaToDefault>true</outputSchemaToDefault>配置选项(maven)。

同时,我们有多个数据库(模式),并使用一个连接池到服务器,如"jdbc:mysql://localhost:3306/"(此处不指定数据库)。

我如何告诉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")
));

我还尝试使用数据库/模式名称,如不配置outputSchemaToDefault。但是,添加上面的MappedSchema代码,但这给了我错误的"'my_databasemy_database。My_table '不存在',这是正确的。我不知道为什么代码给了我两次数据库/模式名称?

编辑:当jooq告诉我db。表不存在,如果我把断点放在一个好地方,并从jooq得到sql,并运行对我的数据库,它确实工作。但是jooq无法运行它。

另外,我使用的是3.15.3版本的jooq。

我解决了。而不是使用.withInputExpression(Pattern.compile(".*")),它似乎与.withInput("")工作。

我仍然不确定为什么它的工作,或者如果这是正确的"解题的方法。但至少这是一条前进的道路。

不知道为什么要使用这个模式,但是我得到了这个名字两次。但是那个我就不管了。

最新更新