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

如何在JPA原生查询的LIKE语句中正确传入字符串参数

JPA原生查询LIKE语句参数绑定错误解决方案

你遇到的问题核心是占位符被放在了单引号内部,JPA的参数绑定机制不会识别单引号内的?作为参数占位符,只会将其视为普通字符串内容,最终执行时就会出现你观察到的多余单引号拼接错误。

可行的解决方案有两种:

  • 方案1:在SQL中使用CONCAT函数拼接通配符,不需要修改业务层传参逻辑,兼容绝大多数数据库:
@Query(value = "select u.* from users where u.name like CONCAT('%', ?1, '%')",nativeQuery = true)
List<User> findAllByNameContaining(String searchString);

对应你实际复杂查询的场景,like条件修改为like CONCAT('%', ?2, '%')即可。

  • 方案2:在业务层手动拼接通配符后再传递参数,SQL语句中直接使用占位符即可:
    Repository层代码:
@Query(value = "select u.* from users where u.name like ?1",nativeQuery = true)
List<User> findAllByNameContaining(String searchString);

业务层调用时处理参数:

String searchParam = "%" + 待查询的字符串 + "%";
List<User> result = userRepository.findAllByNameContaining(searchParam);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:18:02