jOOQ returns 记录中的错误列值

jOOQ returns wrong column value from record

我有以下记录来自带有几个连接的查询:

现在,当我尝试检索不在结果中的特定列时:

record[REG_MEDEWERKER.ID]

其中 REG_MEDEWERKER.ID 生成的 Kotlin 代码具有以下详细信息:

我希望得到 null。但是,返回的是错误的 ID 值(zkn_zaak.id)。

我在这里错过了什么? jOOQ 不应该有足够的信息(table 和字段名称)来从记录中检索正确的列吗?

============更新=============

从代码来看,这似乎是有意为之的行为,并且已经在例如 https://github.com/jOOQ/jOOQ/issues/4471, https://github.com/jOOQ/jOOQ/issues/4455, https://github.com/jOOQ/jOOQ/issues/4476 and https://github.com/jOOQ/jOOQ/issues/10266

所以这解释了很多。

但是,问题仍然是如何确定列 REG_MEDEWERKER.ID 不在结果集中...

来自 Record.get(Field) Javadoc:

If this record contains a field with the same Field.getName() as the argument field, that value is retrieved.

因此根据不合格的列名检索值。仅当该列名不明确时,才会考虑限定以尝试消除列名的歧义。

虽然这可能会导致您遇到意外结果,但在使用别名表、派生表等时它有很多优势。

实施了以下 Kotlin 扩展方法,returns 仅当字段的限定名称与记录中字段的限定名称匹配时记录的值(参见 Lukas Eder 的回答):

fun <T> Record.getStrict(field: Field<T>): T? =
    this.field(field)?.qualifiedName
        ?.takeIf { field.qualifiedName == it }
        ?.let { this[field] }