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"、"Last_Login_Time"、"Role"、"Role6"、"ID_ROLE"、"Role_Id"、"Business Group"、"Business_Group"、"Menu Template"、"Menu_Template" から" REP」

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 に答える