Как я могу спроецировать все столбцы базы данных в быстро меняющейся базе данных? - PullRequest
1 голос
/ 07 мая 2020

У меня часто бывает ситуация, когда сгенерированный код jooq не соответствует базе данных в производстве (столбцы добавляются все время).

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

dsl.select(asterisk())
   .from(PERSON)
   .where(PERSON.PERSON_NO.eq(id))
   .fetch()

Возвращает только столбцы, известные при генерации кода.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Быстрый прием - убедиться, что jOOQ не знает ваши таблицы, используя plain SQL шаблон в вашем предложении from. Таким образом, jOOQ не сможет разрешить звездочку и попытается определить проекцию по фактическим результатам запроса. Например:

dsl.select(asterisk())
   .from("{0}", PERSON)
   .where(PERSON.PERSON_NO.eq(id))
   .fetch();

Это повторяющийся запрос, я думаю, мы можем превратить его в функцию: https://github.com/jOOQ/jOOQ/issues/10182

Обратите внимание, что обычно лучше убедиться, что jOOQ знает точную рабочую схему и поддерживает сгенерированный код в актуальном состоянии. В будущем jOOQ будет поддерживать сгенерированные с использованием версий метаданные, чтобы один и тот же код мог легче работать с разными версиями производственной схемы: https://github.com/jOOQ/jOOQ/issues/4232

1 голос
/ 08 мая 2020

Просто используйте простой SQL: https://www.jooq.org/doc/3.14/manual-single-page/#query -vs-resultquery

Если это не сработает для вас, объяснение, почему бы и нет, может помочь кому-то сформулировать более подходящий ответ.

...