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

为什么以下第二个native query原生查询无法正常返回正确结果?

问题排查与解决方案

错误原因

  • 原生SQL中你将参数占位符:query放在了两个单引号中间,Spring Data JPA会将单引号内的内容识别为普通字符串,无法把:query和你传入的参数绑定,最终执行的SQL里:query不会被替换成实际的查询值。
  • 通配符%和参数的拼接逻辑错误,你当前的写法最终生成的SQL片段为like '%' '实际参数' '%',不符合SQL语法规范,要么执行报错要么匹配不到任何数据。

正确写法

推荐使用CONCAT函数直接在SQL层面拼接通配符和参数,无需额外处理业务层入参:

@Query(nativeQuery = true, value = "select * from meeting as m where m.meeting_name like CONCAT('%', :query, '%')")
List<Meeting> findByNativeQuery(@Param("query") String query);

也可以选择在业务层调用方法时,先给入参query前后拼接%,SQL直接写参数绑定即可:

// DAO层写法
@Query(nativeQuery = true, value = "select * from meeting as m where m.meeting_name like :query")
List<Meeting> findByNativeQuery(@Param("query") String query);

// 业务层调用示例
String searchParam = "%" + query + "%";
meetingRepository.findByNativeQuery(searchParam);

补充说明

JPQL本身支持%:query%这种直接的参数绑定写法,框架会自动处理通配符和参数的拼接逻辑,但原生SQL没有做这类语法兼容,必须遵循标准SQL的参数绑定和字符串拼接规则。

内容的提问来源于stack exchange,提问作者Siful Islam Ove

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:45:07