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

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的列表,但现在返回的是三个对象,而不是两个。 主意 具体示例 如何从查询中获取结果?

  • 几周以来,我们使用JOOQ作为我们的主要持久性框架,而不是所有的Spring Data JPA/Hibernate之类的东西。我真的印象深刻!!! 对于简单的积垢操作,我们使用而此记录是一个,因为基础表包含一个ID(列,PostgreSQL类型为),此外,JOOQ配置了,并且我们的表包含一个用于生成列值的触发器努默: 我期望,之后和由于记录包含id(由列类型生成)和Nummer(由触发器生成)的值