如何获取生成表的行表示?

2024-01-04

我想要得到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(), but DSL.rowField(...)需要另一种参数类型。

错误:(39, 58) Kotlin:无法使用提供的参数调用以下函数 [...]

这个问题是一个后续问题在 JOOQ DSL 中使用 PosgreSQL array_agg 和 join 别名 https://stackoverflow.com/questions/51753861/using-posgresql-array-agg-with-join-alias-in-jooq-dsl但应该是独立的。


jOOQ 3.11 中缺少的功能

jOOQ 代码生成器中似乎缺少一个功能,即生成的Table.fieldsRow()重写的方法提供了更窄的协变Row[N]<...>返回类型。我为此创建了一个功能请求,将在 jOOQ 3.12 中实现:https://github.com/jOOQ/jOOQ/issues/7809 https://github.com/jOOQ/jOOQ/issues/7809

也失踪了,超载了DSL.rowField(RowN)方法:https://github.com/jOOQ/jOOQ/issues/7810 https://github.com/jOOQ/jOOQ/issues/7810

解决方法,明确列出列

这是最明显的解决方法,您显然希望避免这种方法:显式列出所有列名称:

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

解决方法,使用生成的记录

已经有is生成记录中有这样的生成方法。作为解决方法,您可以使用

new ProjectMembersUsersRecord().fieldsRow();

解决方法,扩展代码生成器

你现在就可以自己实现#7809了,通过扩展JavaGenerator带有自定义代码部分:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取生成表的行表示? 的相关文章

随机推荐