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

如何用CriteriaBuilder生成含NVARCHAR(MAX)的STRING_AGG SQL语句

问题

期望生成的SQL语句:

STRING_AGG(CONVERT(NVARCHAR(MAX),columnName), ', ')

当前使用CriteriaBuilder的代码:

cb.function(
    "STRING_AGG",
    String.class, 
    cb.function(
        "CONVERT",
        String.class,
        cb.function("NVARCHAR", Object.class, cb.literal(4000)),
        //columnName expression
    ),
    cb.literal(", ")
)

实际生成的SQL:

STRING_AGG(CONVERT(NVARCHAR(4000),columnName), ', ')

需要将NVARCHAR的参数从字面量4000改为MAX关键字。

解决方案

直接把cb.literal(4000)替换成cb.literal("MAX")即可。因为MAX作为SQL关键字,以字符串字面量形式传入后,Hibernate不会为它添加引号,最终会正确生成你需要的SQL语法。修改后的代码如下:

cb.function(
    "STRING_AGG",
    String.class, 
    cb.function(
        "CONVERT",
        String.class,
        cb.function("NVARCHAR", Object.class, cb.literal("MAX")),
        //columnName expression
    ),
    cb.literal(", ")
)

执行后生成的SQL就是:

STRING_AGG(CONVERT(NVARCHAR(MAX),columnName), ', ')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:52:02