Я пытаюсь использовать 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".