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

如何在jOOQ中为PostgreSQL的JSONB类型字段设置查询条件

PostgreSQL JSONB字段查询转jOOQ实现方法

以下是你给出的原生SQL对应的两种常用jOOQ写法,最终生成的执行逻辑和原SQL完全一致:

写法1:使用代码生成器生成的表元类(推荐)

适用于已经通过jOOQ代码生成工具生成了notifications表对应元类的场景,写法最简洁:

import static org.jooq.impl.DSL.*;
// 替换为你自己项目中jOOQ生成的表类包路径
import static com.yourproject.generated.Tables.NOTIFICATIONS;

// 核心查询逻辑
dslContext.selectFrom(NOTIFICATIONS)
    .where(NOTIFICATIONS.REFERENCE_OBJECT.jsonGetText("questionId")
        .eq("0e75ce19-d124-4d86-84e8-10362c38c972"))
    .fetch();

说明:jsonGetText是jOOQ 3.14+版本针对JSON/JSONB类型提供的原生方法,直接对应PostgreSQL的->>运算符,会将JSON指定键的值以字符串类型返回。

写法2:手动构造字段(无代码生成场景)

如果没有使用代码生成器,手动构造表和字段也可以实现相同逻辑,同时兼容所有jOOQ版本:

import static org.jooq.impl.DSL.*;

// 手动构造reference_object字段和notifications表对象
Field<Object> referenceObject = field(name("public", "notifications", "reference_object"));
dslContext.selectFrom(table(name("public", "notifications")))
    .where(field("{0} ->> {1}", String.class, referenceObject, val("questionId"))
        .eq("0e75ce19-d124-4d86-84e8-10362c38c972"))
    .fetch();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:15:00