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("")

我仍然不确定它为什么有效,或者这是否是解决它的“正确”方法。但至少这是一个前进的方向。

不知道为什么要使用这个模式,虽然我得到了两次这个名字。但是那个我会单独留下。