jOOQでテーブル/列を動的に(つまり、コードジェネレーターを使用せずに)操作する方法は2つあります。
プレーンSQLの使用(org.jooq.SQL
)
それがあなたがしていることです。プレーンSQLのField
で列を直接修飾できることは明らかです。 2つの方法で参照:
"tmp"
を繰り返す 各フィールドの文字列:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("tmp.type", String.class);
Field<String> TOKEN = DSL.field("tmp.token", String.class);
"tmp"
を埋め込むことによって プレーンSQLテンプレートでの参照:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("{0}.type", String.class, TMP);
Field<String> TOKEN = DSL.field("{0}.token", String.class, TMP);
修飾された参照の使用(org.jooq.Name
)
それはおそらくあなたが代わりにやりたいことです。次のように記述します:
Table<Record> TMP = DSL.table(DSL.name("tmp"));
Field<String> TYPE = DSL.field(DSL.name("tmp", "type"), String.class);
Field<String> TOKEN = DSL.field(DSL.name("tmp", "token"), String.class);
名前付け機能については、このマニュアルで説明されています 。
このアプローチの利点は次のとおりです。
- SQLインジェクションのリスクなし
- 大文字と小文字の区別が処理されます
- テーブルマッピングと他のAST変換も機能します