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

JPA中@Query支持LIKE加%,createQuery同写法报错是什么原因?

问题根因

Spring Data JPA 对@Query注解做了专属语法扩展,允许直接在JPQL中写%:参数名%的格式,框架会自动处理通配符和参数的绑定逻辑;但原生EntityManager#createQuery遵循标准JPQL语法,不支持将通配符%直接和参数占位符拼接,所以会抛出语法异常。

两种正确实现方案

方案1:参数值拼接通配符(推荐)

把通配符拼接到参数值中传入,JPQL语句不写%:

List<CustomerType> result2 = (List<CustomerType>)em.createQuery("select c from Customer c where c.custName LIKE :custName ORDER BY AGE DESC")
        .setParameter("custName", "%" + search + "%")
        .setMaxResults(3)
        .getResultList();

该方案逻辑清晰,无SQL注入风险,是最常用的实现方式。

方案2:JPQL中用CONCAT函数拼接

如果希望通配符逻辑写在JPQL内,可以调用JPQL标准函数CONCAT拼接通配符和参数:

List<CustomerType> result2 = (List<CustomerType>)em.createQuery("select c from Customer c where c.custName LIKE CONCAT('%', :custName, '%') ORDER BY AGE DESC")
        .setParameter("custName", search)
        .setMaxResults(3)
        .getResultList();

其他修正提示

你当前代码中的setMAXResults为拼写错误,正确方法名为setMaxResults,部分严格的JPA实现会因为该拼写错误抛出异常,建议同步修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:06:07