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

JPA查询中%运算符对存储数字的字符串类型字段失效是什么原因?

问题核心原因

你遇到的问题不是%运算符对数字字符串不生效,而是JPQL语句中externalId对应的模糊查询语法存在错误。

原查询中两个字段的模糊查询逻辑写法不统一:

  • carportName的查询逻辑正确使用了concat('%',:filterCriteria,'%')完成通配符和查询参数的拼接,所以模糊匹配功能正常
  • externalId的查询逻辑直接写了LIKE %:filterCriteria%,JPQL不支持这种直接在参数两侧加通配符的写法,实际执行时该逻辑会退化为完全匹配,所以只有传入完整的externalId值才能命中结果,传入片段时无匹配数据。

修复方案

把externalId对应的模糊查询逻辑也改为用concat拼接通配符即可,修正后的代码如下:

@Query("SELECT d FROM CarportLocationEntityView d WHERE d.externalId LIKE concat('%',:filterCriteria,'%') OR lower(d.carportName) LIKE lower(concat('%',:filterCriteria,'%')) ")
List<CarportLocationEntityView> filterCarportList(@Param("filterCriteria") String filterCriteria);

如果业务场景需要兼容externalId可能存在的大小写差异(当前你明确该字段均为数字格式字符串,无大小写区分需求可忽略),也可以和carportName一样加上lower函数统一大小写匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:04