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] }
我有以下记录来自带有几个连接的查询:
现在,当我尝试检索不在结果中的特定列时:
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] }