JPA Criteria Api 未生成正确的 sql

问题描述 投票:0回答:1

我的条件查询中有一段,我希望生成一个sql段作为

substring(manifest_url, instr(manifest_url, '?') - 14, 10)

final Path<String> manifestUrlPath = JpaUtils.getPath(SystemComponentTask::getManifestUrl, root);
final Expression<Integer> indexExp = cb.diff(cb.function("INSTR", Integer.class, manifestUrlPath, cb.literal("?")), 14);
cb.substring(manifestUrlPath, indexExp, cb.literal(10));

但是我发现(使用p6spy)生成的sql删除了第三个参数'cb.literal(10))'。

我通过生成代码进行调试,

org.hibernate.query.criteria.internal.expression.function.SubstringFunction
是生成这个sql段的类,在生成HQLQueryPlan之前一切都好,但是生成的HQLQueryPlan sqlString只是删除了第三个参数。

执行前还会出现警告“HHH000174:函数模板预期 3 个参数,但遇到 4 个参数”。

我调用criteria查询api有什么问题吗?

spring hibernate jpa
1个回答
0
投票

您似乎使用了错误的函数名称。

您尝试生成 substring 表达式,但您使用

INSTR
作为函数名称。

© www.soinside.com 2019 - 2024. All rights reserved.