1

我试图仅将 jooq 用作 SQL 生成器,但我似乎无法将架构信息添加到我的查询中:

private String getOtmUserReportSql() {

    Settings settings = new Settings().withRenderMapping(
            new RenderMapping().withDefaultSchema(Constants.REP));
    DSLContext create = DSL.using((Connection) null,SQLDialect.ORACLE,settings);
    String sql =
    create.
            select(
            DSL.fieldByName("User Id").as("User_ID"),
            DSL.fieldByName("User_Name").as("Full_Name"),
            DSL.fieldByName("Active Status").as("Active_Status"),
            DSL.fieldByName("Email").as("Email"),
            DSL.fieldByName("Last Login Time").as("Last_Login_Time"),
            DSL.fieldByName("Role").as("Role6"),
            DSL.fieldByName("ID_ROLE").as("Role_Id"),
            .from(DSL.tableByName(REP)).getSQL();

    LOGGER.info("Generated SQL : {}",sql);
    return sql;
}

生成的 SQL 是:2013-08-12 17:52:12,008 [INFO] [main] cjixciSimpleJDBCReportService[67]:生成的 SQL:选择“User Id”“User_ID”,“User_Name”“Full_Name”,“Active Status” Active_Status”、“Email”、“Email”、“上次登录时间”、“Last_Login_Time”、“Role”、“Role6”、“ID_ROLE”“Role_Id”、“业务组”“Business_Group”、“菜单模板”“Menu_Template”来自“代表"

根据http://www.jooq.org/doc/2.5/manual-single-page/#runtime-schema-mapping上的文档,我应该看到类似:MySchema."User Id" ... MySchema.REP

我正在使用 3.1 版,非常感谢任何帮助

谢谢,

4

1 回答 1

2

Settings.defaultSchema可能意味着这个模式名称被添加到每个表和列中,但事实并非如此。默认模式用于省略“默认”模式名称的呈现,以防您使用生成的表和列对象。换句话说,如果您将连接设置为具有默认模式,您可以告诉 jOOQ 它不再需要呈现该模式。

虽然我可以看到通过 jOOQ 公开的 SPI 通常添加模式名称的一些潜力,但如果您不使用代码生成器,我不确定这是否很容易做到。

最简单的解决方案是只限定您的表引用:DSL.tableByName()

DSL.tableByName("MySchema", REP)
于 2013-08-12T12:55:34.503 回答