如何用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
相关产品推荐
相关产品推荐

