【发布时间】:2020-08-22 20:05:05
【问题描述】:
我经常遇到生成的jooq代码与生产中的数据库不匹配的情况(一直在添加列)。
如何获取包含所有数据库列的弱类型记录?
dsl.select(asterisk())
.from(PERSON)
.where(PERSON.PERSON_NO.eq(id))
.fetch()
仅返回在代码生成时已知的列。
【问题讨论】:
我经常遇到生成的jooq代码与生产中的数据库不匹配的情况(一直在添加列)。
如何获取包含所有数据库列的弱类型记录?
dsl.select(asterisk())
.from(PERSON)
.where(PERSON.PERSON_NO.eq(id))
.fetch()
仅返回在代码生成时已知的列。
【问题讨论】:
快速破解方法是通过在 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
【讨论】:
只需使用普通 SQL:https://www.jooq.org/doc/3.14/manual-single-page/#query-vs-resultquery
如果这对您不起作用,解释为什么不可以帮助某人制定更合适的答案。
【讨论】: