Как сделать оператор select max в jooq - PullRequest
1 голос
/ 18 марта 2020

Я хотел бы перевести следующее SQL -общение в синтаксис jooq:

select max(table.column) from table group by table.anothercolumn

Я пробовал:

  • dsl.select(table.colum, max()) и
  • DSL.select(table.colum, max()) и
  • dsl.select(table.colum.max()) и
  • DSL.select(table.colum.max())

, но в соответствии с Eclipse все эти синтаксисы неправильно ...

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 19 марта 2020

Наиболее распространенные ошибки при запуске с jOOQ:

Нет генерации кода

В большинстве примеров из руководства jOOQ и других вопросов о переполнении стека предполагается, что вы используете Генератор кода jOOQ для обратного инжиниринга вашей схемы. Это означает, что у вас будут сгенерированные объекты, такие как table (более вероятно, TABLE) в сгенерированных классах.

Вам нужно будет stati c импортировать все эти объекты, например, используя

import static com.example.generated.Tables.*;

Теперь вы можете ссылаться на все ваши таблицы, например, c import, и на их столбцы из таблиц соответственно

Нет stati c import DSL.*

Еще одно предварительное условие для наиболее эффективного использования jOOQ необходимо выполнить c импорт всех методов из DSL:

import static org.jooq.impl.DSL.*;

Это позволит вам использовать неквалифицированную max(Field) статистическую функцию.

Обе эти предпосылки задокументированы в разделе руководства о том, как читать руководство . Они оба являются необязательными, вы можете работать с jOOQ без этих stati c импортов и всегда полностью квалифицировать ваши выражения.

Рабочий пример

После того, как вы настроили генерацию кода и stati c import, будет работать следующий запрос:

DSLContext dsl = DSL.using(connection, dialect);

Result<?> result =
dsl.select(max(TABLE.COLUMN))
   .from(TABLE)
   .groupBy(TABLE.ANOTHERCOLUMN)
   .fetch();

выберите max (table.column) из группы таблиц по table.anothercolumn

...