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

