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

升级JOOQ从3.14.6到3.17.5时LIMIT子句生成变化的问询

JOOQ 3.14.6 升级至 3.17.5 的SQL生成差异问题

问题背景

将JOOQ从3.14.6升级到3.17.5后,针对Postgres数据库生成的分页SQL出现差异:

  • 3.14.6版本生成的SQL:
SELECT 
  public.payment.request_id 
FROM 
  payment 
WHERE 
  payment.status_expire_at < cast(
    '2007-12-03 10:15:30+00:00' as timestamp(6) with time zone
  )
ORDER BY 
  public.payment.status_expire_at ASC LIMIT 10;
  • 3.17.5版本生成的SQL:
SELECT 
  public.payment.request_id 
FROM 
  payment 
WHERE 
  payment.status_expire_at < cast(
    '2007-12-03 10:15:30+00:00' as timestamp(6) with time zone
  )
ORDER BY 
  public.payment.status_expire_at ASC FETCH NEXT 10 ROWS ONLY;

问题解答

1. 如何让3.17.5版本生成与3.14.6一致的SQL?

可以通过JOOQ的Settings配置切换分页语法生成逻辑:

  • 在创建DSLContext时,设置fetchFirstUsingLimit为true,即可让JOOQ继续生成LIMIT语法的分页SQL:
Settings settings = new Settings()
    .withFetchFirstUsingLimit(true);
DSLContext dsl = DSL.using(connection, SQLDialect.POSTGRES, settings);

该配置为运行时生效,无需修改代码生成器设置。

2. 有没有汇总3.14.6到3.17.5版本SQL生成变化的文档?

JOOQ官方每个大版本的发布笔记会包含SQL生成相关的变更内容,可依次查看3.15、3.16、3.17版本的发布说明,重点关注以下章节:

  • SQL Dialect Support(方言支持更新)
  • Query Rendering(查询渲染逻辑调整)
    这些章节会详细记录SQL生成规则的变化、新语法支持等内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:30:46