You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Embeddable生成错误字段索引致空指针,求解决方案

问题描述

我的表中包含以下docusign_前缀的列:

docusign_account_id TEXT NOT NULL,
docusign_envelope_id TEXT NOT NULL,

我通过以下jOOQ配置将这些列打包为Embeddable:

embeddables {
    embeddable {
        name = "DOCUSIGN_ENVELOPE_DETAILS"
        tables = "version"
        fields {
            field {
                name = "ENVELOPE_ID"
                expression = "DOCUSIGN_ENVELOPE_ID"
            }
            field {
                name = "ACCOUNT_ID"
                expression = "DOCUSIGN_ACCOUNT_ID"
            }
        }
    }
}

但使用时触发空指针异常,原因是生成的Embeddable setter使用了错误的字段索引:单独字段的setter用偏移量15,而Embeddable的setter用偏移量16:

/**
 * Setter for <code>public.version.docusign_account_id</code>.
 */
public void setDocusignAccountId(String value) {
    set(15, value);
}
/**
 * Setter for the embeddable <code>public.DOCUSIGN_ENVELOPE_DETAILS</code>.
 */
public void setDocusignEnvelopeDetails(DocusignEnvelopeDetailsRecord value) {
    set(12, value.getEnvelopeId());
    set(16, value.getAccountId());
}

手动修正索引后,代码生成时会被复原。除了弃用该功能,有没有额外配置可以解决这个问题?

解决方案
  • 调整Embeddable字段顺序与表列顺序一致
    表中列的顺序是docusign_account_id在前,docusign_envelope_id在后,但你配置的Embeddable字段顺序是先ENVELOPE_ID再ACCOUNT_ID。jOOQ生成Embeddable setter时,会按配置的字段顺序对应表中的列索引,顺序不匹配会导致索引错误。修改配置的fields顺序:

    embeddables {
        embeddable {
            name = "DOCUSIGN_ENVELOPE_DETAILS"
            tables = "version"
            fields {
                field {
                    name = "ACCOUNT_ID"
                    expression = "DOCUSIGN_ACCOUNT_ID"
                }
                field {
                    name = "ENVELOPE_ID"
                    expression = "DOCUSIGN_ENVELOPE_ID"
                }
            }
        }
    }
    
  • 升级jOOQ到最新稳定版本
    部分旧版本的jOOQ存在Embeddable字段索引计算的bug,升级到最新的稳定版(比如3.18+或更高)可以修复这类索引不匹配的问题。

  • 检查是否存在自定义生成策略干扰
    如果项目中配置了自定义的代码生成策略(比如自定义GeneratorStrategy),可能会改变字段索引的计算逻辑,需要确认该策略没有干扰Embeddable的索引生成。

内容的提问来源于stack exchange,提问作者User1291

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:35:20