Как получить представление строки сгенерированной таблицы? - PullRequest
0 голосов
/ 24 августа 2018

Я хочу получить Row[N]<...> представление сгенерированного типа таблицы JOOQ.Я хочу использовать его в этом контексте:

val p = PROJECTS.`as`("p")
val pmu = PROJECTMEMBERUSERS.`as`("pmu")
val query = db
    .select(p.asterisk(), DSL.arrayAgg(DSL.rowField(<-- insert Row[N]<...> here -->)))
    .from(p.join(pmu).on(p.ID.eq(pmu.PROJECTID)))
    .groupBy(p.ID)

Я уже пытался вставить pmu.fieldsRow(), но DSL.rowField(...) ожидает другой тип параметра.

Ошибка: (39, 58) Kotlin: ни одна из следующих функций не может быть вызвана с предоставленными аргументами [...]

Этот вопрос является дополнительным вопросом к Использование PosgreSQL array_agg с псевдонимом соединения в JOOQ DSL но должен быть автономным.

1 Ответ

0 голосов
/ 24 августа 2018

Отсутствует функция в jOOQ 3.11

Кажется, отсутствует функция в генераторе кода jOOQ, сгенерированный переопределенный метод Table.fieldsRow(), обеспечивающий более узкий ковариантный тип возврата Row[N]<...>.Я создал запрос функции для этого, который будет реализован в jOOQ 3.12: https://github.com/jOOQ/jOOQ/issues/7809

Также отсутствует, перегруженный метод DSL.rowField(RowN): https://github.com/jOOQ/jOOQ/issues/7810

Обходной путь, столбцы списка явно

Это наиболее очевидный обходной путь, которого вы, очевидно, хотите избежать: явное перечисление всех имен столбцов:

row(pmu.COL1, pmu.COL2, ..., pmu.COLN)

обходной путь, используйте сгенерированные записи

Там уже - это такой сгенерированный метод в сгенерированных записях.В качестве обходного пути вы можете использовать

new ProjectMembersUsersRecord().fieldsRow();

Обходной путь, расширить генератор кода

Вы уже можете реализовать # 7809 самостоятельно, расширив JavaGenerator с помощью пользовательского раздела кода:

https://www.jooq.org/doc/latest/manual/code-generation/codegen-custom-code

...