如何投影快速变化的数据库的所有数据库列?

How can I project all database columns of a fast changing database?

我经常遇到生成的 jooq 代码与生产中的数据库不匹配的情况(列一直被添加)。

如何获取包含所有数据库列的弱类型记录?

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

只有 returns 代码生成时已知的列。

只需使用普通 SQL: https://www.jooq.org/doc/3.14/manual-single-page/#query-vs-resultquery

如果这对您不起作用,解释为什么不可以帮助别人制定更合适的答案。

一个快速的破解方法是通过在您的 from 子句中使用 plain SQL templating 来确保 jOOQ 不 知道 您的表。这样,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