当前位置: 首页 > 知识库问答 >
问题:

jOOQ从记录中返回错误的列值

宣弘新
2023-03-14

我有以下记录是通过一个带有几个连接的查询得到的:

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

record[REG_MEDEWERKER.ID]

其中REG_MEDEWERKER. ID生成具有以下详细信息的静态编程语言代码:

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

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

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

从代码来看,这似乎是预期的行为,并且已经在例如。https://html" target="_blank">github.com/jOOQ/jOOQ/issues/4471, https://github.com/jOOQ/jOOQ/issues/4455, https://github.com/jOOQ/jOOQ/issues/4476和https://github.com/jOOQ/jOOQ/issues/10266

这解释了很多。

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

共有2个答案

郑光济
2023-03-14

从记录中。获取(字段)Javadoc:

如果此记录包含具有相同字段的字段。getName()作为参数字段,检索该值。

因此,根据非限定列名检索值。只有当该列名不明确时,才会考虑限定条件以尝试消除该列名的歧义。

虽然这可能会导致您正在经历的意外结果,但在处理别名表、派生表等时,它有很多优势。

禄星腾
2023-03-14

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

kotlin prettyprint-override">fun <T> Record.getStrict(field: Field<T>): T? =
    this.field(field)?.qualifiedName
        ?.takeIf { field.qualifiedName == it }
        ?.let { this[field] }
 类似资料:
  • 我知道Postgres允许返回预定义的复合数据类型、记录和具有列定义的表。 然而,我没有返回一个定义了列的简单记录,所以我总是使用表,即使我知道这只返回一行。 我的函数定义如下: 如果我尝试以同样的方式返回记录,则返回失败: 这在博士后中不可能吗?我知道我可以只声明一个自定义复合数据类型,但我不想为每个返回记录的函数声明一个类型。

  • 目前我正在从pojos列表映射到记录,我希望能够一次插入多行。我如何在JOOQ中用一个事务做到这一点? 我曾尝试将列表放入“值”中,但出现异常“值的数量必须与字段的数量匹配”

  • 我有一个spring boot应用程序(spring 5.0.7.Release,spring boot version 2.0.3)。 当我尝试从我的angular 4应用程序登录时,我得到一个错误500 2018-07-13 12:11:59.243调试64187--[nio-9000-exec-2]F.p.a.customBasicAuthenticationFilter:身份验证成功:or

  • 代码在行处产生错误 而错误消息是 IO:1 ch,44100 Hz,Float32客户机:1 ch,44100 Hz,“AAC”(0x00000003)16位/通道,2字节/包,1帧/包,2字节/帧 我尝试过不同的音频格式设置,但似乎没有一个修复这个错误。有人能帮忙吗?

  • 这个问题是jOOQ的扩展:在单个对象中返回带有join、groupby和count的列表,但现在返回的是三个对象,而不是两个。 主意 具体示例 如何从查询中获取结果?

  • 问题内容: 我希望有人根据以下示例表对以下内容提供快速的建议/解决方案: 我希望能够建立一个查询来返回其名称(基于单个记录)= 1的列名称。这无需依赖游标或临时表。 即我想要以下输出: 我一直在尝试对(和)进行各种联接,但到目前为止收效甚微。 问题答案: 您也可以使用 要动态工作,请使用此功能。