jOOQ を使用して、一般的なコードで SQL クエリを作成しようとしています。jOOQ を使用してこれらのクエリを実行したり、結果を調べたりすることに興味はありません。また、このコードは汎用的であるため、jOOQ のコード生成は使用できません。
私はこれを理解することができました:
List<org.jooq.Field<?>> fields = new ArrayList<org.jooq.Field<?>>();
Field<?> field = Factory.field("somefield");
fields.add(field);
field = Factory.field("someotherfield");
fields.add(field);
Field<Object> fieldPK = Factory.field("somePKField");
Condition condition = fieldPK.equal(123);
Factory factory = new Factory(connection, SQLDialect.POSTGRES);
SelectFinalStep step = factory.select(fields).from("sometable").where(condition);
String query = step.getQuery().getSQL(true);
しかし、Factory.field() と from() は、実際のテーブルやフィールド名ではなく一般的な SQL を使用するため、(RenderNameStyle.QUOTED を使用している場合でも) 引用符がなく、SQL インジェクションに対する保護もありません。
それらの名前が何であるかを知っているフィールドまたはテーブルを作成する方法はありますか? 理想的には、jOOQ が "sometable"."somefield" 文字列を作成して、その名前とその親テーブルの両方で Field を指定できます。