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

JPA模糊查询公司名称时遇index out of range:0错误求助

解决JPA模糊查询出现index out of range: 0错误的方案

一、原生查询的错误修复

你的原生SQL写法存在问题,:keyword被单引号包裹后,JPA无法识别为参数占位符,会把整个'%:keyword%'当作普通字符串处理,导致参数绑定失败,进而引发索引越界错误。可以通过两种方式修正:

  1. 使用数据库字符串拼接函数(适配多数数据库):
@Query(value="select * from company where name like CONCAT('%', :keyword, '%')", nativeQuery=true)
public List<Company> getByName(@Param("keyword") String keyword);
  1. 在Java代码层给参数添加通配符,SQL中直接使用占位符:
// 方法定义不变,调用时传入带%的参数,比如 "%abc%"
@Query(value="select * from company where name like :keyword", nativeQuery=true)
public List<Company> getByName(@Param("keyword") String keyword);

二、JPA方法名查询的注意事项

  1. findByNameContaining:JPA会自动在参数前后添加%,调用时直接传入关键词(比如"abc")即可,无需手动拼接通配符。若传入空字符串或null,可能触发异常,建议调用前做非空校验。
  2. findByNameLike:需要手动给参数添加%,比如调用时传入"%abc%",如果仅传纯关键词,会变成精确匹配,参数处理不当也可能引发错误。

三、额外排查点

  • 检查传入的keyword参数是否为null或空字符串,空值会导致SQL解析异常,建议在业务层提前过滤无效参数。
  • 5万条数据量不算极大,但频繁模糊查询会触发全表扫描,建议给company表的name字段创建全文索引(如MySQL的FULLTEXT索引),既提升查询性能,也能避免因全表扫描引发的潜在异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:08:10